スポンサーサイト

上記の広告は1ヶ月以上更新のないブログに表示されています。
新しい記事を書く事で広告が消せます。

PL/pgSQLで月初日と月末日を求める

PL/pgSQLで時間の加減で作った関数を利用して、月初日と月末日を求める関数を作成します。
月初日

CREATE OR REPLACE FUNCTION get_first_day_of_month(
p_ts timestamp with time zone
) RETURNS timestamp with time zone AS $$
DECLARE
BEGIN
IF p_ts IS NULL THEN
RETURN NULL;
END IF;
RETURN date_trunc('month', p_ts);
END;
$$ LANGUAGE plpgsql;

月末日

CREATE OR REPLACE FUNCTION get_last_day_of_month(
p_ts timestamp with time zone
) RETURNS timestamp with time zone AS $$
DECLARE
BEGIN
IF p_ts IS NULL THEN
RETURN NULL;
END IF;
RETURN add_time(
add_time(get_first_day_of_month(p_ts), 1, 'month'),
-1, 'day');
END;
$$ LANGUAGE plpgsql;

月初日を求めるのにdate_truncを使っています。これは、指定した日付の単位で切り捨ててくれます。monthで切り捨てれば、その月の1日の0時になるので、まさに月初日になります。

月末日は月初日に一ヶ月足して、一日引くことで計算しています。
もし、月末日ぎりぎりまで時間範囲が欲しいなら、最後の'day'を'microseconds'にすればOKです。

スポンサーサイト

COMMENTS

COMMENT FORM

TRACKBACK


この記事にトラックバックする(FC2ブログユーザー)

上記広告は1ヶ月以上更新のないブログに表示されています。新しい記事を書くことで広告を消せます。