タイガーラック クリエイティブブログ
2026
March
27

作っておくと便利なpostgresqlの自作関数

業務上でたびたび必要になり作ってよかった自作関数があるので今回は3点紹介します。
※この記事はPostgreSQL 16.11 で動作確認してます。

・last_day(日付)
引数の日付の月末日を取得する関数です。

例
SELECT last_day(CURRENT_DATE) ;

結果
2026/03/31
CREATE OR REPLACE FUNCTION "public"."last_day"("datdate" date)
  RETURNS "pg_catalog"."date" AS $BODY$
BEGIN
  return date(DATE_TRUNC('month', $1) + '1 month' +'-1 Day');
END;
$BODY$
  LANGUAGE plpgsql VOLATILE
  COST 100
;

・num_only(文字列)
引数で指定した文字列から数字のみ抽出して出力します。

例
SELECT num_only('abc123あいう456');

結果
123456
CREATE OR REPLACE FUNCTION "public"."num_only"("p_src" text)
  RETURNS "pg_catalog"."text" AS $BODY$
declare
    text_result text;
begin
		--引数を半角数字のみにして返す。全角数字も半角数字にする。NULLは空文字にする
    if p_src is null or p_src = '' then
        return '';
    end if; 
		text_result := translate(p_src,'1234567890','1234567890');
    text_result := translate(text_result,translate(p_src,'1234567890',''),'');
		
    return text_result;
end;
$BODY$
  LANGUAGE plpgsql IMMUTABLE
  COST 100
;

・isvaliddate(文字列)
文字列が日付かどうか判定する。
postgresqlには日付かどうかを判定する関数がないので自作します。

例
SELECT isvaliddate('2026/02/30');

結果
FALSE
CREATE OR REPLACE FUNCTION "public"."isvaliddate"(text)
  RETURNS "pg_catalog"."bool" AS $BODY$
BEGIN
	PERFORM $1 :: date ;
	RETURN TRUE ;
EXCEPTION WHEN OTHERS THEN
	RETURN FALSE ;
END ;
$BODY$
  LANGUAGE plpgsql IMMUTABLE
  COST 100

以上。業務で使用する頻度が高い3つの自作関数でした。
参考になれば幸いです。

このカテゴリの最新記事

関連記事

SHOP LIST

タイガーラック株式会社

〒577-0056
大阪府東大阪市長堂1-3-14 TOKUYASU Bld.