【问题标题】:DB2 timestamp comparisonDB2 时间戳比较
【发布时间】:2016-08-05 04:14:52
【问题描述】:

我的下表只有 4 行:

当我运行查询时

 select * from TABLE9 
     where dateLastChanged < dateLastUploaded

在这张桌子上,我希望看到第 1 行和第 4 行,但是我得到了这个:

当我跑步时

 select * from TABLE9 
     where dateLastChanged > dateLastUploaded

我明白了

,到

 select * from TABLE9 
     where dateLastChanged <> dateLastUploaded

我得到了所有 4 个。 ... where dateLastChanged = dateLastUploaded 没有。

我尝试转换为时间戳——得到了相同的结果:

 select * from TABLE9 
     where timestamp(dateLastChanged) < timestamp(dateLastUploaded)

缺少什么???

我第一次在项目上使用 DB2。越来越“爱”它。

注意:我知道我可以在 Java 端解决这个问题。

//----------------------------

编辑:

在 Q 中澄清我认为很清楚的内容:

怎么会

 select * from TABLE9 
     where dateLastChanged < dateLastUploaded

正在返回 dateLastChanged &lt; dateLastUploadeddateLastChanged &gt; dateLastUploadeddateLastChanged = dateLastUploaded

DB2 如何决定哪个时间戳更大、更小、相等、不相等。行tNumber=bbbbb 的时间戳是同时创建和写入的。

//--------------------

EDIT-2

在我原来的 Q 中,时间戳比较中的“大于/小于”令人困惑。这(后一个时间戳更大/不) 一旦我通过了我在 Q 中列出的 inconsistency 和在此之前的编辑,很容易弄清楚。

【问题讨论】:

  • 请解释一下为什么您认为“17:24”比“17:14”少(即早)?
  • 您查看过您的时间戳吗?只要看得够近,你就会找到所有答案。一切都按预期工作!
  • 我也喜欢 DB2,因为它是正确的。
  • @MichaelTiefenbacher 希望不是“一切都像预期的那样工作!”。阅读编辑。
  • 抱歉,您的编辑让我感到困惑。如果您参考第一个示例并且 tNumber=ccccc 2016-08-13 大于 2016-08-03 - 只需查看日期就足够了。

标签: db2 db2-luw


【解决方案1】:

DB2 使用 ISO 定义的逻辑来比较时间戳。这意味着对于“较低”,采用较早的日期/时间,对于“较大”,采用较晚的日期/时间。对于您的示例,DB2 已正确评估所有内容。要获得不同的结果,您需要更改值... :)

【讨论】:

    猜你喜欢
    • 2012-07-09
    • 1970-01-01
    • 2016-07-26
    • 2011-07-24
    • 1970-01-01
    • 1970-01-01
    • 2012-02-04
    • 2013-03-13
    • 1970-01-01
    相关资源
    最近更新 更多