如何使用to_char正确比较日期?

时间:2015-11-06 16:45:15

标签: oracle to-char

我的查询类似于:

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

我的结果集包含STARTDATE,所有这些都小于'01 -OCT-2015'

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

3 个答案:

答案 0 :(得分:1)

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

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

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

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;

在继续主查询

之前检查结果是否符合预期

答案 1 :(得分:0)

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

答案 2 :(得分:-1)

SELECT STUFF
FROM TABLENAME
WHERE to_date( STARTDATE, 'DD-Mon-YYYY' ) > to_date( '01-Oct-2015', 'DD-Mon-YYYY' );