首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >比较DATE - Oracle类型的值

问比较DATE - Oracle类型的值
EN

Stack Overflow用户
提问于 2011-03-08 02:35:02
回答 3查看 417关注 0票数 1

有没有办法与日期值进行比较,以检查其中一个是否在另一个之前?例如,我如何知道以下行中哪一行出现在最前面

代码语言:javascript
复制
SEQ   CREATION_DTM
--------------------
234   2011-03-26 22:59:03
235   2011-03-26 22:59:03

以上数据的列被声明为DATE数据类型。仔细阅读之后,DATE数据类型似乎并不存储毫秒。这是否意味着我不能比较上面两个日期,找出哪个日期在另一个日期之前?

编辑

我在Solaris上使用Oracle 10G。

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2011-03-08 02:46:55

日期只能存储到第二个日期。因此,如果在同一秒内插入两行,则无法根据CREATION_DTM列确定先插入哪一行。如果您想要该级别的分辨率,最好使用TIMESTAMP [WITH [LOCAL] TIME ZONE]列,该列将存储多达9位小数位的时间分量(如果主机操作系统提供该级别的粒度的话)(大多数Unix系统将提供微秒级别的分辨率)。

在您的例子中,假设您没有使用RAC,并且您正在使用一个Oracle序列来填充SEQ列,那么您可以使用该列来打破平局。如果这两行是在不同的事务中插入的,并且尚未更新,并且表是用ROWDEPENDENCIES构建的,那么您还可以使用ORA_ROWSCN来打破平局。

票数 3
EN

Stack Overflow用户

发布于 2011-03-08 02:46:24

DATE精度只精确到最近的秒,所以如果有两个日期与该精度相同,则无法对它们进行区分或排序。为了获得更高的精度,您需要将它们存储为TIMESTAMP。

在更一般的情况下,日期确实不同,您可以像数字一样对它们进行比较和排序。当你得到两个相同的结果时,结果是不确定的;在你的例子中,如果你是按CREATION_DTM排序的,那么你不能可靠地预测结果是按234,235排序还是按235,234排序。你需要确定一种打破平局的方法,正如Justin所建议的那样。

票数 5
EN

Stack Overflow用户

发布于 2011-03-08 17:01:00

timestamp数据类型似乎适合您的查询。谢谢

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/5223653

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档