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

标签 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。为什么当我尝试查找手动输入的数据和系统生成的数据之间的差异时,我得到不同的结果?

最佳答案

无需将 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/

相关文章:

sql - 查询 Oracle 12 个月移动总计 (SUM) 数据

sql - 如何在 SQL 查询中声明一个常量?

javascript - jQuery uidatepicker 按钮图像不起作用

java - WebLogic 中什么控制时区到 GMT 偏移映射?

c# - 预订系统中的SQL

mysql - 具有不同产品名称的计数字段的 SQL 总和一次

查询中的 MySQL 循环变量

sql - Oracle 中的匿名 TABLE 或 VARRAY 类型

mysql - 如何在mysql中搜索json数据?

oracle - oracle 格式化日期