Postgres current_date 日付によってSQのWhere句を変化させる
Postgresを利用しています。日付によって、集計範囲を変えたいという要件が出てきました。
2/21 - 8/20 とそれ以外
日付のマニュアル
https://www.postgresql.jp/document/9.4/html/functions-datetime.html
本年2月21日を作る
make_date(cast(date_part('year',current_date) as int),2,21)
解説
current_date 本日
date_part('year',current_date) 本年 この状態ではduble precision
cast(date_part('year',current_date) as int) 年をintにする
年月日をintで指定する必要がある
make_date(year int, month int, day int)
本年8月20日
make_date(cast(date_part('year',current_date) as int),8,20)
これを元に作成したWHERE句
WHERE
no01 = 18 AND
CASE
WHEN
--本日日付が2/21 - 8/20 だった場合の日付指定範囲
current_date >= make_date(cast(date_part('year',current_date) as int),2,21) AND
current_date <= make_date(cast(date_part('year',current_date) as int),8,20)
THEN dthono >= make_date(cast(date_part('year',current_date) as int),2,21) AND dthono <= make_date(cast(date_part('year',current_date) as int),8,20)
WHEN
--上記以外で、本日日付が8月以降だった場合
date_part('month',current_date) >= 8
THEN dthono >= make_date(cast(date_part('year',current_date) as int),8,21)
ELSE dthono >= make_date(cast(date_part('year',current_date) as int) - 1,8,21)
END