【问题标题】:DATEDIFF in DB2 queryDB2 查询中的 DATEDIFF
【发布时间】:2018-10-18 13:46:20
【问题描述】:

我有一个来自 mysql 的查询,该查询一直在我最近迁移到 DB2 的表上运行。

由于下面的行,查询现在在 DB2 上失败,说找不到 DATEDIFF。我假设只是因为这不是 db2 上的有效函数。

在 DB2 上是否有与此相同的功能可以保持性能和功能?

SELECT DISTINCT
    LEAST(180, DATEDIFF(curdate(), start_date)) as days
FROM table2
where expire_date > curdate()

【问题讨论】:

  • 您是否在 DB2 中查找过日期/时间函数?这可能会有所帮助:ibm.com/developerworks/data/library/techarticle/0211yip/…
  • 我有并且我确实看到了 TIMESTAMPDIFF,但我还没有看到我可以如何类似地应用它来使用 LEAST 函数。如果日期在从今天开始的 180 天内,我将使用它来返回天数,但如果它更多,那么我只是返回 180。
  • “有趣的日期和时间”。也许在 2003 年很有趣。如果您使用的是 Db2 11.1(即 Db2 LUW),则有一大堆日期函数。请参阅条目“新的内置聚合和标量函数”。这里ibm.com/support/knowledgecenter/en/SSEPGG_11.1.0/… 特别是'DAYS_BETWEEN`

标签: sql db2 datediff


【解决方案1】:

在 Db2 11.1(适用于 Linux、Unix 和 Windows)及更高版本上,这将起作用

SELECT DISTINCT
    LEAST(180, DAYS_BETWEEN(current_date, start_date)) as days
FROM table2
where expire_date > current_date

【讨论】:

    【解决方案2】:

    我使用DAYS() 函数将日期转换为数字序号,然后将它们相减,如下所示:

    SELECT DISTINCT
        LEAST(180, DAYS(curdate()) - DAYS(start_date)) as days
    FROM table2
    where expire_date > curdate()
    

    根据 DB2 的手册,DAYS() 返回:“结果比 0001 年 1 月 1 日的天数多 1”。

    【讨论】:

      猜你喜欢
      • 2011-12-04
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-08-14
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多