我有一个类似的查询:
SELECT STUFF
FROM TABLENAME
WHERE TO_CHAR(STARTDATE, 'DD-MON-YYYY') > '01-OCT-2015'
我的结果集包含STARTDATE
所有小于 '01-OCT-2015' 的 s
我究竟做错了什么?非常感谢!
在这种情况下更建议比较日期而不是字符串
如果比较字符串,则查询必须将表相关列中的所有日期转换为字符串,而不是将单个字符串转换为日期。
这样,无论打印格式如何,都可以正确比较日期
SELECT STUFF
FROM TABLENAME
WHERE STARTDATE > to_date('01-OCT-2015 00:00:00' , 'DD-MON-YYYY HH24:MI:SS')
您可以尝试查询:
select to_date('01-OCT-2015 00:00:00' , 'DD-MON-YYYY HH24:MI:SS') from dual;
在继续主查询之前检查结果是否符合预期
这会将日期作为字符串进行比较,这些字符串将按字母顺序排列。如果要将它们作为字符串进行比较,则应使用格式“YYYY-MM-DD”,该格式将按字母顺序正确排序。请注意,“MM”是作为零填充整数的月份,而不是月份的缩写。
SELECT STUFF
FROM TABLENAME
WHERE to_date( STARTDATE, 'DD-Mon-YYYY' ) > to_date( '01-Oct-2015', 'DD-Mon-YYYY' );