gpt4 book ai didi

sql - 在 (DB2) SQL 中选择上个月的第一天

转载 作者:太空狗 更新时间:2023-10-30 01:46:19 32 4
gpt4 key购买 nike

我需要检查给定日期是否在前一个月以进行月度查询。我可以得到

CURRENT DATE - 1 MONTH

与所选日期进行比较,但我不能假设当前日期恰好是每个月的第一天。是否有一种内置方法可以在不提取年份和月份并将其粘合在一起的情况下获取月份的第一天?

最佳答案

在所有 Db2 版本中可用

今年的第一天:

date('0001-01-01') + year(current date) years - 1 year

这个月的第一天:

date('0001-01-01') + year(current date) years - 1 year + month(current date) months - 1 month

上个月的第一天:

date('0001-01-01') + year(current date) years - 1 year + month(current date) months - 2 months

在 Db2 11.1 和更新版本中可用

如果您不需要保持 SQL 与 Db2 LUW v10.5 及更早版本的兼容性,您还可以使用这些方便的 Db2 LUW v11.1 标量函数:THIS_WEEK() THIS_MONTH () THIS_QUARTER()THIS_YEAR()

这个月的第一天:

THIS_MONTH(CURRENT DATE)

上个月的第一天:

THIS_MONTH(CURRENT DATE) - 1 MONTH

上个月的最后一天:

THIS_MONTH(CURRENT DATE) - 1 DAY

关于ROUND_TIMESTAMP()的注释

ROUND_TIMESTAMP() 在 Db2 9.7 和更新版本中可用,但考虑到它在设计上将一些输入值向下舍入,而另一些则向上舍入,ROUND_TIMESTAMP() 并不是一个理想的选择可靠地返回当前月份或上个月的第一天的方法。

正如原始问题中所指出的,CURRENT DATE - 1 MONTH 在当月的第一天运行时将仅返回上个月的第一天(期望的结果),但是 ROUND_TIMESTAMP(CURRENT DATE - 1 MONTH, 'W') 只会将该行为再延长三天,直到第五天,届时它将开始返回上个月的第八天。类似地,ROUND_TIMESTAMP(CURRENT DATE - 1 MONTH, 'MM') 只会返回上个月的第一天,直到并包括 15 号,之后它会向上舍入并返回上个月的第一天当前月份。

关于sql - 在 (DB2) SQL 中选择上个月的第一天,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1063174/

32 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com