【PostgreSQL】日付の加算、週の加算、月の加算
日、週、月の加算をする
-- 日付の加算、週の加算、月の加算
日付 + cast( '5 days' as INTERVAL ) -- 5日加える
日付 + cast( '5 weeks' as INTERVAL ) -- 5週加える
日付 + cast( '5 months' as INTERVAL ) -- 5か月加える
-- 時間の加算、分の加算、秒の加算
日付 + cast( '5 hours' as INTERVAL ) -- 5時間加える
日付 + cast( '5 minutes' as INTERVAL ) -- 5分加える
日付 + cast( '5 seconds' as INTERVAL ) -- 5秒加える
-- マイナスを付けると減算になります
日付 + cast( '-5 days' as INTERVAL ) -- 5日前を求める
※ 日付はDate型、Timestamp型どちらでもOKです。
※ 例ではdaysのように複数形になっていますが、1 daysや2 dayと記述しても普通に動きます。
あわせて読みたい
日付の差を求める方法はこちらで紹介しています。
日、週、月の加算例
日、週、月の加算例です。ここの例はそのままコピー&貼り付けで実行できます。
日付の加算
-- 1.現在時刻に5日加える
select now() + cast('5 days' as INTERVAL);
-- 2020-07-16 08:00:00.000000+09
-- 2.『2020/1/1』に5日加える
select cast('2020/1/1' as date) + cast('5 days' as INTERVAL);
-- 2019-01-06 00:00:00
-- 3.『2020/1/1 9:00:00』に5日加える
select cast('20200101 09:00:00' as timestamp) + cast('5 days' as INTERVAL);
-- 2020-01-06 09:00:00
週の加算例
-- 1.現在時刻に5週加える
select now() + cast('5 weeks' as INTERVAL);
-- 2020-08-15 08:00:00.000000+09
-- 2.『2020/1/1』に5週加える
select cast('2020/1/1' as date) + cast('5 weeks' as INTERVAL);
-- 2019-02-05 00:00:00
-- 3.『2020/1/1 9:00:00』に5週加える
select cast('20200101 09:00:00' as timestamp) + cast('5 weeks' as INTERVAL);
-- 2020-02-05 09:00:00
月の加算例
-- 1.現在時刻に5ヶ月加える
select now() + cast('5 months' as INTERVAL);
-- 2020-12-11 08:00:00.000000+09
-- 2.『2020/1/1』に5ヶ月加える
select cast('2020/1/1' as date) + cast('5 months' as INTERVAL);
-- 2019-06-01 00:00:00
-- 3.『2020/1/1 9:00:00』に5ヶ月加える
select cast('20200101 09:00:00' as timestamp) + cast('5 months' as INTERVAL);
-- 2020-06-01 09:00:00
時、分、秒の加算例
時間の加算例
-- 1.現在時刻に5時間加える
select now() + cast('5 hours' as INTERVAL);
-- 2020-07-11 13:00:00.000000+09
-- 2.『2020/1/1』に5時間加える
select cast('2020/1/1' as date) + cast('5 hours' as INTERVAL);
-- 2020-01-01 05:00:00
-- 3.『2020/1/1 9:00:00』に5時間加える
select cast('20200101 09:00:00' as timestamp) + cast('5 hours' as INTERVAL);
-- 2020-01-01 14:00:00
分の加算例
-- 1.現在時刻に5分加える
select now() + cast('5 minutes' as INTERVAL);
-- 2020-07-11 13:00:00.000000+09
-- 2.『2020/1/1』に5分加える
select cast('2020/1/1' as date) + cast('5 minutes' as INTERVAL);
-- 2020-01-01 00:05:00
-- 3.『2020/1/1 9:00:00』に5分加える
select cast('20200101 09:00:00' as timestamp) + cast('5 minutes' as INTERVAL);
-- 2020-01-01 09:05:00
秒の加算例
-- 1.現在時刻に5秒加える
select now() + cast('5 seconds' as INTERVAL);
-- 2020-07-11 08:00:05.000000+09
-- 2.『2020/1/1』に5秒加える
select cast('2020/1/1' as date) + cast('5 seconds' as INTERVAL);
-- 2020-01-01 00:00:05
-- 3.『2020/1/1 9:00:00』に5秒加える
select cast('20200101 09:00:00' as timestamp) + cast('5 seconds' as INTERVAL);
-- 2020-01-01 09:00:05
【応用】月末日を求める
使う頻度はそう高くはないですが、日付を加える方法を使って月末日を求める方法があります。
例えば2月の月末日を求めたい時、3/1から1日前を求めればよいことになります。
-- 2021年2月(下の例では2021/2/14の日付から)の月末日を取得する
select date(DATE_TRUNC('month', cast('2021/2/14' as date)) + '1 month' +'-1 Day');
-- "2021-02-28"