我在查询Oracle期望的结果时遇到问题。
我使用的TO_TIMESTAMP
似乎工作正常:
SELECT TO_TIMESTAMP('11-16-2014 00:00:00', 'mm-dd-yyyy hh24:mi:ss') FROM DUAL
返回
2014-11-16 00:00:00
我的表格AUDIT
有一个Oracle CURRENT_TIMESTAMP
类型的列TIMESTAMP(6)
。我不知道它是否有帮助,但这一栏也有这些属性:
DATATYPE=93
COLUMN_SIZE=11
DECIMAL_DIGITS=6
NUM_PREC_RADIX=10
CHAR_OCTET_LENGTH=11
让我们看看桌子大小:
SELECT count(*) FROM RPT.AUDIT
返回
623981
此表每天增加约500行。所以我希望此查询返回1000以下的数字
相反,我得到了整个表格:
SELECT count(*) FROM RPT.AUDIT WHERE CURRENT_TIMESTAMP > TO_TIMESTAMP('11-16-2014 00:00:00', 'mm-dd-yyyy hh24:mi:ss')
返回
623981
谢谢,如果你能提供帮助。
答案 0 :(得分:3)
因为CURRENT_TIMESTAMP是Oracle函数的名称,所以数据库更喜欢使用函数而不是列 - 因此,CURRENT_TIMESTAMP
(函数)总是大于过去的时间,谓词返回TRUE对于表中的每一行,因此每行都被计算在内。如果在查询中放置表别名并使用别名限定列名称,则应该得到预期的结果:
SELECT count(*)
FROM RPT.AUDIT a
WHERE a.CURRENT_TIMESTAMP > TO_TIMESTAMP('11-16-2014 00:00:00', 'mm-dd-yyyy hh24:mi:ss')
如果您愿意,也可以将该列称为RPT.AUDIT.CURRENT_TIMESTAMP
。
分享并享受。