Oracle TIMESTAMP与TO_TIMESTAMP函数的比较

时间:2014-11-18 02:40:43

标签: oracle

我在查询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

谢谢,如果你能提供帮助。

1 个答案:

答案 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

分享并享受。