如果手动输入日期,则SQL日期差异返回错误结果

时间:2017-06-22 04:31:51

标签: sql oracle date

我试图通过

找到两个日期之间的差异
SELECT TO_DATE(SYSDATE, 'DD-MM-YYYY') - TO_DATE('27-06-2017', 'DD-MM-YYYY') FROM DUAL;

它返回-730492,这是错误的,因为它应该是-5。我试过了

SELECT TO_DATE(SYSDATE, 'DD-MM-YYYY') FROM DUAL; --(1)
SELECT TO_DATE('27-06-2017', 'DD-MM-YYYY') FROM DUAL; -- (2)

(1)返回22-06-2017,(2)返回27-06-2017。如果我尝试

SELECT TO_DATE(SYSDATE, 'DD-MM-YYYY') - TO_DATE(SYSDATE + 5, 'DD-MM-YYYY') FROM DUAL;

它将返回正确的值-5。为什么当我试图找出手动输入数据与系统生成数据之间的差异时,我会得到不同的结果?

1 个答案:

答案 0 :(得分:3)

无需在SYSDATE中包裹TO_DATE()。这已经是个约会。你正在做的是隐式类型转换,这里不需要它。

需要您原来的陈述:TO_DATE(SYSDATE, 'DD-MM-YYYY')

它正在变成这样: TO_DATE(TO_CHAR(SYSDATE), 'DD MONTH YYYY')

请尝试用此行替换它:

SELECT SYSDATE - TO_DATE('27-06-2017', 'DD-MM-YYYY') FROM DUAL;