やりたいことは、配列A{1,3,4,5,8,10,11,12}と配列B{1,2,5,11,13}から共通する要素(1,5,11)を探し、
配列Aの要素番号(1,4,7)を取得すること。(配列Aの要素はユニークである仮定)
配列Bが数値1つでよければ、contribにidx関数がある。
idx(int[], int item)
戻り値の型:int
説明:itemに一致する要素番号(存在しなければ0)
例:idx(array[11,22,33,22,11], 22)
結果:2
intarray
http://www.postgresql.jp/document/current/html/intarray.html
これを利用して関数を作成(sort()とuniq()もintarrayモジュールに含まれる)
CREATE OR REPLACE FUNCTION idx_array(_int4, _int4) RETURNS _int4 AS
'SELECT
uniq(sort(array_agg(idx($1, t.v))))
FROM
unnest($2) AS t(v)
WHERE
idx($1, t.v) > 0'
LANGUAGE SQL IMMUTABLE STRICT;
SELECT idx_array(ARRAY[1,3,4,5,8,10,11,12], ARRAY[1,2,5,11,13])
結果:{1,4,7}
2011年9月30日金曜日
登録:
コメントの投稿 (Atom)
0 件のコメント:
コメントを投稿