スポンサーサイト

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

PL/pgSQLで配列の最大値、最小値を取得する

PostgreSQLで配列を使っていると、最大値最小値がほしいときがあります。
minとかmaxとか便利関数があるのかと思っていたのですが、無いようですので自作しました。
単純にループで回して、最小値か最大値を取る方針になります。
p_max_flagがtrueの時は最大値を返します。falseの時は最小値です。
さらに数値でも文字列でも使えるように、多様型を使います。
$0は推測された型の戻り値になりますので、エイリアスで名前を付けて利用しています。


CREATE OR REPLACE FUNCTION uv_max_min_array(
p_params anyarray
,p_max_flag boolean DEFAULT true
) RETURNS anyelement AS $$
DECLARE
w_count int;
w_result ALIAS FOR $0;
BEGIN
IF p_params IS NULL THEN
RETURN NULL;
END IF;
w_count := array_length(p_params, 1);
IF w_count IS NULL OR 0 = w_count THEN
RETURN NULL;
END IF;
FOR i IN 1..w_count LOOP
IF (w_result IS NULL) OR
(p_max_flag AND w_result < p_params[i]) OR
(NOT p_max_flag AND w_result > p_params[i])
THEN
w_result := p_params[i];
END IF;
END LOOP;
RETURN w_result;
END;
$$ LANGUAGE plpgsql;

利用例
select uv_max_min_array(ARRAY[1, 2, 11]);
→11

select uv_max_min_array(ARRAY['1', '2', '11'])
→'2'

select uv_max_min_array(ARRAY[1, 2, 11], false);
→1

一行入魂サイトにまとめがあります。
スポンサーサイト

COMMENTS

COMMENT FORM

TRACKBACK


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

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