【PostgreSQL】次の月曜日、火曜日、○曜日を求める(next_day関数)
次の月曜日、火曜日、○曜日を求める(next_day関数)
基準となる日付より後で、最初の指定した曜日の日付を取得します。
引数
引数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より後の最初の日曜日)