Atsushi2022の日記

データエンジニアリングに関連する記事を投稿してます

PostgreSQL text型配列のパターンマッチングのやり方

テキスト型配列ではそのままパターンマッチングができない。

テキスト型配列でパターンマッチングをするには、UNNEST関数でテキスト型配列のネストを解除し、ネスト解除したものに対してパターンマッチングを行う。

実際にやってみる。

まずテキスト型配列をもつテーブルを作成し、適当な行を挿入する。

テキスト型配列を挿入する際は、'{}'で囲む。

CREATE TABLE table1 (
    "id" integer,
    nest_data text[]
);

INSERT INTO table1 VALUES (1, '{abc, 123, XYZ}');
INSERT INTO table1 VALUES (2, '{ttt, 543, BCD}');

作成されたテーブルを表示すると、ちゃんとネストされている。

SELECT id, nest_data FROM table1;

id  unnested_data
1   {abc,123,XYZ}
2   {ttt,543,BCD}

nest_data列をUNNEST関数でネスト解除するとこんな感じになる。

SELECT id, unnested_data FROM 
(SELECT id, UNNEST(nest_data) "unnested_data" FROM table1 ) as t;

id  nest_data       unnested_data
1   {abc,123,XYZ}   abc
1   {abc,123,XYZ}   123
1   {abc,123,XYZ}   XYZ
2   {ttt,543,BCD}   ttt
2   {ttt,543,BCD}   543
2   {ttt,543,BCD}   BCD

あとはネスト解除した列でパターンマッチングしつつ、ネストされた列のみを取り出せばうまいこと抽出できる。

SELECT id, nest_data FROM 
(SELECT id, nest_data, UNNEST(nest_data) "unnested_data" FROM table1) as t
WHERE unnested_data LIKE '1%';

id  nest_data
1   {abc,123,XYZ}