我试图找出两个日期之间的差异
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
。为什么当我尝试查找手动输入的数据和系统生成的数据之间的差异时,我得到不同的结果?
最佳答案
无需将 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;
关于如果手动输入日期,SQL 日期差异会返回错误结果,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44690183/