如何将字符串中的日期与 Oracle 中的 sysdate 进行比较?
How to compare date in string with sysdate in Oracle?
我是 Oracle 的新手,仍然习惯 SQL 服务器。
我不明白为什么下面的命令会 return '1' 显然今天的 sysdate 是 29-Apr-15,而在 30-Apr-15
之前
应该是return0。但是我不明白为什么是returns 1。
有什么想法吗?谢谢=)
SELECT CASE WHEN sysdate > to_date('30-Apr-15','DD-MON-YYYY') THEN '1' ELSE '0' END
FROM DUAL
你错过了约会的那个世纪
SELECT CASE WHEN sysdate > to_date('30-Apr-2015','DD-MON-YYYY') THEN '1' ELSE '0' END
FROM DUAL
因为你用的是15
而不是2015
。您需要注意 Y2K 漏洞。在 DATE 中使用 'YY' 格式表示年份是个坏主意。将字符串转换为 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>
我是 Oracle 的新手,仍然习惯 SQL 服务器。
我不明白为什么下面的命令会 return '1' 显然今天的 sysdate 是 29-Apr-15,而在 30-Apr-15
之前应该是return0。但是我不明白为什么是returns 1。
有什么想法吗?谢谢=)
SELECT CASE WHEN sysdate > to_date('30-Apr-15','DD-MON-YYYY') THEN '1' ELSE '0' END
FROM DUAL
你错过了约会的那个世纪
SELECT CASE WHEN sysdate > to_date('30-Apr-2015','DD-MON-YYYY') THEN '1' ELSE '0' END
FROM DUAL
因为你用的是15
而不是2015
。您需要注意 Y2K 漏洞。在 DATE 中使用 'YY' 格式表示年份是个坏主意。将字符串转换为 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>