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';
Run Code Online (Sandbox Code Playgroud)
这里我的t.col34值来自table数据类型的表varchar2(20).我试图将其与值进行比较,但有时我遇到以下错误:
ORA-01858:找到了一个非数字字符,其中包含数字
你没有to_date正确使用.此Oracle函数需要第二个参数,该参数指定给定输入字符串的格式.
to_Date('24-DEC-2017')
Run Code Online (Sandbox Code Playgroud)
应该写成:
to_Date('24-DEC-2017', 'dd-mmm-yyyy')
Run Code Online (Sandbox Code Playgroud)
要么 :
to_Date('24-DEC-2017', 'dd-mon-yyyy', 'nls_date_language = american')
Run Code Online (Sandbox Code Playgroud)
列T34也是如此,你说的是VARCHAR2.您需要指定此列中存储的字符串日期.假设这与'24-DEC-2017'您的格式相同,您需要:
to_Date('24-DEC-2017', 'dd-mmm-yyyy') > to_date(T.COL34, 'dd-mmm-yyyy')
Run Code Online (Sandbox Code Playgroud)
有关更多详细信息,请参阅Oracle日期时间格式模型.
PS:请注意,在VARCHAR列中存储日期是一种不好的做法,应该避免(容易出错,效率不高,......).Oracle提供了针对该用例的DATE数据类型(以及各种其他相关的日期数据类型).