2

我有一个类似的查询:

SELECT STUFF 
FROM TABLENAME
WHERE TO_CHAR(STARTDATE, 'DD-MON-YYYY') > '01-OCT-2015'

我的结果集包含STARTDATE所有小于 '01-OCT-2015' 的 s

我究竟做错了什么?非常感谢!

4

3 回答 3

2

在这种情况下更建议比较日期而不是字符串

如果比较字符串,则查询必须将表相关列中的所有日期转换为字符串,而不是将单个字符串转换为日期。

这样,无论打印格式如何,都可以正确比较日期

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;

在继续主查询之前检查结果是否符合预期

于 2015-11-06T22:09:44.223 回答
1

这会将日期作为字符串进行比较,这些字符串将按字母顺序排列。如果要将它们作为字符串进行比较,则应使用格式“YYYY-MM-DD”,该格式将按字母顺序正确排序。请注意,“MM”是作为零填充整数的月份,而不是月份的缩写。

于 2015-11-06T16:52:47.077 回答
-1
SELECT STUFF
FROM TABLENAME
WHERE to_date( STARTDATE, 'DD-Mon-YYYY' ) > to_date( '01-Oct-2015', 'DD-Mon-YYYY' );
于 2019-03-01T04:16:34.513 回答