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

e5nszbig  于 2022-11-07  发布在  DB2
关注(0)|答案(6)|浏览(321)

我需要检查一个给定的日期是否在每月查询的上个月。我可以得到

CURRENT DATE - 1 MONTH

来比较选取的日期,但我无法假设目前的日期就是每个月的第一天。是否有内建的方法可以取得月份的第一天,而不需要撷取年份和月份并将它们粘在一起?

inn6fuwd

inn6fuwd1#

当月第一天:

CURRENT_DATE - (DAY(CURRENT_DATE)-1) DAYS

本年度的第一天是

CURRENT_DATE - (DAY(CURRENT_DATE)-1) DAYS - (MONTH(CURRENT_DATE)-1) MONTHS

上个月的最后一天:

CURRENT_DATE - DAY(CURRENT_DATE) DAYS

上个月的第一天:

CURRENT_DATE - (DAY(CURRENT_DATE)-1) DAYS - 1 MONTH
uqjltbpv

uqjltbpv2#

今年的第一天:

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

如果您不需要维护SQL与Db2 LUW v10.5及更早版本的兼容性,也可以使用以下方便的Db2 LUW v11.1标量函数:第一个是第一个是第一个。
本月第一天:

THIS_MONTH(CURRENT DATE)

上月第一天:

THIS_MONTH(CURRENT DATE) - 1 MONTH

上个月的最后一天:

THIS_MONTH(CURRENT DATE) - 1 DAY
14ifxucb

14ifxucb3#

下面是我的DB2 SQL Month Calculation速查表的片段:
本月月初:

CURRENT DATE + 1 DAYS - DAY(CURRENT DATE) DAYS

本月末:

LAST_DAY(CURRENT DATE)

上月初:

CURRENT DATE + 1 DAYS - DAY(CURRENT DATE) DAYS - 1 MONTHS

上月末:

LAST_DAY(CURRENT DATE - 1 MONTHS)

下月初:

CURRENT DATE + 1 DAYS - DAY(CURRENT DATE) DAYS + 1 MONTHS

下个月底:

LAST_DAY(CURRENT DATE + 1 MONTHS)
aydmsdu9

aydmsdu94#

为了充实这一点与更多的信息。上面的解决方案是完美的,如果你想要的第一天的一个月,说你想要的最后一天的一个月,或在我的情况下,我想要的最后一天的下一个季度。
从上面我正在做

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

这并没有给我我想要的,有时日期是30号而不是31号,有31天的月份...
将其更改为

date('0001-01-31') + year(date(prevQdate))years - 1 year +**(month(prevQdate) + 2)**months)

给了我我想要的。看起来第一次添加的月份从prev季度日期是重新设置天的一部分,我的日期,因此第二次添加的月份是工作的日期只有30天的一个月。
只是在DB2中使用这种日期操作方法时需要注意的问题。

chhqkbe1

chhqkbe15#

LUW 9.7(我认为是z/os)方法使用内置函数。
本月最后一天:

LAST_DAY(CURRENT DATE)

上个月的第一天:

LAST_DAY(CURRENT DATE - 2 MONTHS) + 1 DAY or (LUW) TRUNCATE(CURRENT DATE - 1 month, 'MONTH')

本月第一天:

LAST_DAY(CURRENT DATE - 1 MONTH) + 1 DAY or (LUW) TRUNCATE(CURRENT DATE, 'MONTH');
btqmn9zl

btqmn9zl6#

我相信下面的方法对你有用。

ROUND_TIMESTAMP (somedate,'W')

相关问题