【PostgreSQL】日付の加算、週の加算、月の加算

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"