我正在尝试运行一个简单的查询,该查询排除表中所有大于日期列最大值的记录。 e.g。
SELECT * FROM TABLE1
WHERE LD_TMSTMP > (SELECT MAX(LD_TMSTMP) FROM TABLE1)
===========================================
0 records returned
此查询应返回零记录并执行此操作。但是,当我尝试运行内部查询时,我得到了这个:
SELECT MAX(LD_TMSTMP) FROM TABLE1
===========================================
2015-04-22 06:42:32
当我将此值放在同一个查询中时,我得到131条记录
SELECT * FROM TABLE1
WHERE LD_TMSTMP > TO_DATE('2015-04-22 06:42:32','YYYY-MM-DD HH24:MI:SS')
===========================================
131 records returned
有谁知道为什么会这样?在以字符串格式返回日期时,是否需要使用更好的精度值?
答案 0 :(得分:1)
这里的问题是您将DATE与TIMESTAMP混淆。 tipoff在您的标题中,引用DATE,但您的数据显示您正在处理TIMESTAMP。
从你的SQL我们可以看到你使用TO_DATE而不是TO_TIMESTAMP来转换你的角色表示,这不足为奇地给了我们一个日期。
TESTDB.ADMIN(ADMIN)=> select TO_DATE('2015-04-22 06:42:32','YYYY-MM-DD HH24:MI:SS');
TO_DATE
------------
2015-04-22
(1 row)
TESTDB.ADMIN(ADMIN)=> select to_timestamp('2015-04-22 06:42:32','YYYY-MM-DD HH24:MI:SS');
TO_TIMESTAMP
---------------------
2015-04-22 06:42:32
(1 row)