Sql ORA-01858在使用函数到_日期时

Sql ORA-01858在使用函数到_日期时,sql,oracle,date,Sql,Oracle,Date,这里我的t.col34值来自表,其中列数据类型为varchar220。 我试图将其与值进行比较,但有一段时间我发现以下错误: ORA-01858:在指定数字的位置找到非数字字符 期望 您使用的日期不正确。此Oracle函数需要第二个参数,该参数指定给定输入字符串的格式 select * from GM_STANDARD_UPLOAD_TEMP t where to_Date('24-DEC-2017') > to_date(T.COL34) and T.COL34

这里我的t.col34值来自表,其中列数据类型为varchar220。 我试图将其与值进行比较,但有一段时间我发现以下错误:

ORA-01858:在指定数字的位置找到非数字字符 期望

您使用的日期不正确。此Oracle函数需要第二个参数,该参数指定给定输入字符串的格式

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';
应写为:

to_Date('24-DEC-2017') 
或:

T34列也是如此,你说它是一个VARCHAR2。您需要指定此列中存储字符串日期的格式。假设此格式与“2017年12月24日”相同,您希望:

to_Date('24-DEC-2017', 'dd-mon-yyyy', 'nls_date_language = american')
有关更多详细信息,请参阅

PS:请注意,在VARCHAR列中存储日期是一种不好的做法,应该避免容易出错、效率低下等情况。。。。Oracle提供了适用于该用例的日期数据类型以及各种其他相关的日期数据类型。

您没有正确使用日期。此Oracle函数需要第二个参数,该参数指定给定输入字符串的格式

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';
应写为:

to_Date('24-DEC-2017') 
或:

T34列也是如此,你说它是一个VARCHAR2。您需要指定此列中存储字符串日期的格式。假设此格式与“2017年12月24日”相同,您希望:

to_Date('24-DEC-2017', 'dd-mon-yyyy', 'nls_date_language = american')
有关更多详细信息,请参阅


PS:请注意,在VARCHAR列中存储日期是一种不好的做法,应该避免容易出错、效率低下等情况。。。。Oracle提供了适用于该用例的日期数据类型以及各种其他相关的日期数据类型。

为什么要将日期值存储在varchar列中。这真是个坏主意。该错误表示您的列不包含有效的日期值。您究竟为什么要将日期值存储在varchar列中。这真是个坏主意。该错误表明您的列不包含有效的日期值。实际上,该列应写为“2017年12月24日”、“dd mon yyyy”、“nls_date_language=american”或“2017年12月24日”、“dd mm yyyy”@WernfriedDomscheit:感谢您的评论,更新了我的答案,实际应写为“2017年12月24日”,“dd mon yyyyy”、“nls_date_language=american”或“to_date'24-12-2017”、“dd mm yyyy”@WernfriedDomscheit:感谢您的评论,相应地更新了我的答案