如何在Oracle中将字符串中的日期与sysdate进行比较?

时间:2015-04-29 10:57:11

标签: oracle date comparison

我是Oracle的新手,仍然习惯于SQL Server。

我不明白为什么以下命令会返回' 1'当明确的sysdate,今天是29-Apr-15,显然在30年4月30日之前

它应该返回0.但我不明白为什么它会返回1.

有什么想法吗?谢谢=)

SELECT CASE WHEN sysdate > to_date('30-Apr-15','DD-MON-YYYY') THEN '1' ELSE '0' END
    FROM DUAL

2 个答案:

答案 0 :(得分:3)

你错过了约会的世纪

SELECT CASE WHEN sysdate > to_date('30-Apr-2015','DD-MON-YYYY') THEN '1' ELSE '0' END
    FROM DUAL

答案 1 :(得分:2)

因为您使用了15而不是2015。您需要了解 Y2K 错误。使用' YY' DATE中年份的格式是一个坏主意。将字符串转换为 DATE

时,请务必尝试使用' YYYY'

否则,请使用 RR 格式来克服Y2K问题。

例如,

SQL> alter session set nls_date_format='mm/dd/yyyy';

Session altered.

SQL> SELECT TO_DATE('30-Apr-15','DD-MON-RR') RR,
  2         TO_DATE('30-Apr-15','DD-MON-YYYY') YY
  3  FROM DUAL;

RR         YY
---------- ----------
04/30/2015 04/30/0015

SQL>

在查询中使用相同的内容:

SQL> SELECT
  2    CASE
  3      WHEN sysdate > to_date('30-Apr-15','DD-MON-RR')
  4      THEN '1'
  5      ELSE '0'
  6    END
  7  FROM DUAL
  8  /

C
-
0

SQL>