select *
from GM_STANDARD_UPLOAD_TEMP t
where
to_Date('24-DEC-2017') > to_date(T.COL34)
and T.COL34 IS NOT NULL
AND UPLOAD_BATCH_ID = 'UH00002319122018025335'
AND USER_AID = 'US000000'
and T.record_no > 1
and T.TRANS_TYPE='ADD';
这里我的t.col34
值来自表,列数据类型为varchar2(20)
。
我试图将其与值进行比较,但一段时间后出现以下错误:
ORA-01858:发现一个非数字字符,其中数字为 预期的
答案 0 :(得分:6)
您没有正确使用to_date
。该Oracle函数需要第二个参数,该参数指定给定输入字符串的格式。
to_Date('24-DEC-2017')
应写为:
to_Date('24-DEC-2017', 'dd-mmm-yyyy')
或:
to_Date('24-DEC-2017', 'dd-mon-yyyy', 'nls_date_language = american')
T34列也是如此,您所说的是VARCHAR2。您需要指定此列中以哪种格式存储字符串日期。假设此格式与'24-DEC-2017'
相同,则您需要:
to_Date('24-DEC-2017', 'dd-mmm-yyyy') > to_date(T.COL34, 'dd-mmm-yyyy')
有关更多详细信息,请参见the Oracle Datetime Format Models。
PS:请注意,将日期存储在VARCHAR列中是一种不良做法,应避免使用(容易出错,效率不高,...)。 Oracle提供了针对该用例的DATE数据类型(以及其他各种相关的日期数据类型)。