【发布时间】:2010-11-06 23:36:35
【问题描述】:
对于每月查询,我需要检查给定日期是否在上个月。我可以得到
CURRENT DATE - 1 MONTH
比较选定的日期,但我不能假设当前日期将是每个月的第一天。是否有一种内置方法可以在不提取年份和月份并将其重新粘合在一起的情况下获取该月的第一天?
【问题讨论】:
对于每月查询,我需要检查给定日期是否在上个月。我可以得到
CURRENT DATE - 1 MONTH
比较选定的日期,但我不能假设当前日期将是每个月的第一天。是否有一种内置方法可以在不提取年份和月份并将其重新粘合在一起的情况下获取该月的第一天?
【问题讨论】:
今年的第一天:
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_WEEK()THIS_MONTH()THIS_QUARTER() 和 THIS_YEAR()。
本月的第一天:
THIS_MONTH(CURRENT DATE)
上个月的第一天:
THIS_MONTH(CURRENT DATE) - 1 MONTH
上个月的最后一天:
THIS_MONTH(CURRENT DATE) - 1 DAY
【讨论】:
这是我的 DB2 SQL Month Calculation Cheat Sheet 中的 sn-ps:
当月月初:
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)
【讨论】:
当月的第一天:
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
【讨论】:
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');
【讨论】:
我相信以下内容对您有用。
ROUND_TIMESTAMP (somedate,'W')
【讨论】:
为了用更多信息充实这一点。如果您想要一个月的第一天,例如您想要一个月的最后一天,或者在我的情况下,我想要下个季度的最后一天,那么上面的解决方案是完美的。
从上面我在做
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 中使用这种日期操作方法时需要注意一些事项。
【讨论】: