2012-02-05 298 views
6

我有一个“DATE”类型的列,我想在它上面运行一个查询,并将它与sysdate进行比较。将日期与oracle中的sysdate进行比较

但我得到以下错误,有人可以让我知道我在这里失踪了吗?

SQL> select distinct file_name as r 
    from table_1 
    where view_day >= TO_DATE(SYSDATE-10, 'YYYY/MM/DD'); 

ERROR at line 1: 
ORA-01858: a non-numeric character was found where a numeric was expected 
+0

如果这些答案的人帮你解决,请绿色标志吧。 – 2016-07-19 16:45:34

回答

0

错误显示,VIEW_DAY列是VARCHAR,所以你需要日期转换为字符串。使用TO_CHAR或将VIEW_DAY转换为日期类型。

+1

没有。 view_date是DATE类型 – TopCoder 2012-02-05 06:44:23

+2

@TopCoder - 我猜!看看 - http://www.orafaq.com/wiki/ORA-01858 – adatapost 2012-02-05 06:46:54

+0

谢谢!你是对的。系统中view_date和sysdate的默认日期格式都设置为DD-MON-YYYY。将格式更改为相同帮助! – TopCoder 2012-02-05 06:52:03

14

您不应该在日期上使用to_date,To_date用于将日期转换为日期而不是日期。
如果你确实在某个日期使用函数to_date,那么oracle会根据nls_date_format将它作为一个字符串来引用,这在不同的环境中可能会有所不同。
作为@jonearles说,如果你想删除的时间SYSDATE然后用TRUNC

+1

+1表示“不要在日期列上使用to_date”。 – 2012-02-05 08:45:20

6

用途:

select distinct file_name as r 
from table_1 
where view_day >= TRUNC(SYSDATE-10)