スポンサーサイト

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

PL/pgSQLで時間の加減

PostgreSQLでは時間の加減を行う関数が用意されていません。
その代わり+演算子で計算することになります。
SELECT now() + interval '10 days';
みたいな感じです。
10みたいな数字をいちいち文字列にするのがめんどくさいですね。
JDBCとかでパラメーターで渡したり、テーブルのカラムを渡したいとか。
ということで、PL/pgSQLで関数を作ります。
CREATE OR REPLACE FUNCTION add_time(
p_ts timestamp with time zone
,p_count int
,p_unit text)
RETURNS timestamp with time zone AS $$
DECLARE
w_interval interval;
w_result timestamp with time zone;
BEGIN
w_interval := p_count::text || ' ' || p_unit;
SELECT
p_ts + w_interval
INTO
w_result;
RETURN w_result;
END;
$$ LANGUAGE plpgsql;

第一引数は基準となる時間、第二引数は増減する数、第三引数は時間の単位でsecond, minute, hour, day, month, yearが文字列で入ります。
例えば
SELECT add_time(now(), 10, 'day');
SELECT add_time(now(), -10, 'hour');
のように使います。
Oracleのadd_months関数を移植するなら、以下の通りです。
CREATE OR REPLACE FUNCTION add_months(
p_ts timestamp with time zone
,p_count int)
RETURNS timestamp with time zone AS $$
BEGIN
RETURN add_time(p_ts, p_count, 'month');
END;
$$ LANGUAGE plpgsql;
スポンサーサイト

Tag : PostgreSQL

COMMENTS

COMMENT FORM

TRACKBACK


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

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