【PostgreSQL】次の月曜日、火曜日、○曜日を求める(next_day関数)

2020年7月18日

スポンサーリンク

説明

基準となる日付より後で、最初の指定した曜日の日付を取得します。

 

引数

引数1(date):基準となる日付

引数2(integer):取得したい曜日(0:日、1:月、2:火、3:水、4:木、5:金、6:土)

 

返り値

基準となる日付の翌日(当日は含まない)以後の日で、指定した曜日の日付

 

コード

CREATE OR REPLACE FUNCTION next_day(
    date,
    integer)
  RETURNS date AS
$BODY$
declare

	d_target	alias for $1;  --引数1:対象の日付
	i_weekday	alias for $2;  --引数2:取得する曜日(0:日 , 1:月 , 2:火 , 3:水 , 4:木 , 5:金 , 6:土)

	d_temp		date;
	
BEGIN

	for temp_count in 1..7
 	loop
    --日付を1日ずつ加算し、i_weekdayと一致したらリターンする
		d_temp = d_target + cast(cast(temp_count as character varying) || ' days' as INTERVAL);
		if date_part('dow', d_temp) = i_weekday then
		return d_temp;
		end if;
	end loop;
	

	return d_temp;

END;
$BODY$
  LANGUAGE plpgsql VOLATILE
  COST 100;
ALTER FUNCTION next_day(date, integer)
  OWNER TO postgres;

※PostgreSQL9.5 , 9.6 , 10 , 11 , 12で動作確認済み 自作関数の実行方法はこちら

 

実行例

select * from next_day('2019/9/23',2);
--2019/9/24(2019/9/23以降の最初の火曜日)

select * from next_day('2019/9/23',0);
--2019/9/29(2019/9/23以降の最初の日曜日)

 

PostgreSQLの構文まとめを書いています

入門~経験者まで「基本構文・こんな時どう書くんだっけ?」のまとめ