我是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
答案 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
否则,请使用 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>