我试图通过
找到两个日期之间的差异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
。为什么当我试图找出手动输入数据与系统生成数据之间的差异时,我会得到不同的结果?
答案 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;