有没有办法比较日期值来检查一个是否在另一个之前? 例如,我怎么知道哪一个出现在下面的行
SEQ CREATION_DTM
--------------------
234 2011-03-26 22:59:03
235 2011-03-26 22:59:03
上述数据的列声明为数据类型DATE。阅读它似乎DATE数据类型不存储毫秒。这是否意味着 我不能比较上面两个日期,找出哪一个在另一个之前?
我在Solaris上使用Oracle 10G。
答案 0 :(得分:5)
DATE
精度仅到达最接近的秒,因此如果您有两个与该精度相同的日期,则无法区分或排序它们。为了获得更高的精确度,您需要将它们存储为TIMESTAMP
。
在更一般的情况下,日期确实不同,您可以比较和排序,就像数字一样。当你得到两个相同的结果是不确定的;在您的情况下,如果您按CREATION_DTM
订购,那么您无法可靠地预测结果是按234,235
还是235,234
排序。正如贾斯汀所建议的那样,你需要确定一种打破平局的方法。
答案 1 :(得分:3)
DATE仅存储到秒。因此,如果在同一秒中插入两行,则无法确定哪一行基于CREATION_DTM
列。如果你想要那个级别的分辨率,你最好使用TIMESTAMP [WITH [LOCAL] TIME ZONE]
列,如果主机操作系统提供这种级别的粒度(大多数Unix系统将提供微秒),它将存储时间组件最多9位小数。分辨率)。
在您的情况下,假设您没有使用RAC并且您正在使用Oracle序列来填充SEQ
列,您可以使用该列来打破平局。如果在不同的事务中插入了两行,但尚未更新,并且表格是使用ROWDEPENDENCIES
构建的,那么您还可以使用ORA_ROWSCN
来打破平局。
答案 2 :(得分:0)
似乎时间戳数据类型将适合您查询.. 感谢