with
r as (
select
to_date(year(c) || '-' || month(c) || '-01' , 'YYYY-MM-DD') as e,
to_date(year(p) || '-' || month(p) || '-01' , 'YYYY-MM-DD') as b
from (
select current date as c, current date - 1 month as p from sysibm.sysdummy1
) x
)
select *
from t
cross join r
where t.ts >= r.b and t.ts < r.e
2条答案
按热度按时间qlfbtfca1#
可以很容易地预先计算cte中的日期范围,然后在主查询中使用它。假设您的表
t
有一个ts
列作为筛选依据,您可以执行以下操作:请参阅db<>fiddle处的示例。
hsvhsicv2#
在Db2 SQL查询中,有几种方法可以将上个月描述为日期范围。有些datetime SQL函数在Db2 for z/OS上不可用,但即使这样,您仍然可以使用日期算术和
LAST_DAY()
函数。上月第一天:
LAST_DAY(CURRENT DATE - 2 MONTHS) + 1 DAY
个上个月的最后一天:
LAST_DAY(CURRENT DATE - 1 MONTH)
本月第一天:
LAST_DAY(CURRENT DATE - 1 MONTH) + 1 DAY
包含-排除示例(首选方法):
包含-包含示例(调用
DATE()
函数将阻止隐式类型转换,该转换可能会跳过某些限定行):如果要在Db2中查询LUW v11.1或更高版本,还可以调用
THIS_MONTH()
函数来获取输入月份的第一天。上月第一天:
THIS_MONTH(CURRENT DATE - 1 MONTH)
本月第一天:
THIS_MONTH(CURRENT DATE)
包含-排除示例: