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

时间:2009-06-30 11:29:49

标签: sql database date db2

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

CURRENT DATE - 1 MONTH

比较所选日期,但我不能假设当前日期将是每个月的第一天。是否有内置的方法来获取本月的第一天而不提取年份和月份并将其粘合在一起?

6 个答案:

答案 0 :(得分:11)

本月的第一天:

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 

答案 1 :(得分:10)

今年的第一天:

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

答案 2 :(得分:3)

以下是我的DB2 SQL Month Calculation Cheat Sheet中的代码片段:

本月初:

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)

答案 3 :(得分:1)

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

从上面我正在做

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)

给了我想要的东西。看起来从上一季度开始的月份的第一次添加是重置我的日期的DAY部分,因此第二个月的增加是在一个月只有30天的日期。

在DB2中使用这种日期操作方法时要小心谨慎。

答案 4 :(得分:1)

使用内置函数的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');  

答案 5 :(得分:0)

我相信以下内容适合您。

ROUND_TIMESTAMP (somedate,'W')