[PostgreSQL] PostgreSQL で配列要素を SQL で選択する

2014年4月15日

 先日、Oracle の VARRAY の Select をしましたが、それの PostgreSQL 版を試す。

 まずは create table から。Oracle のように create type は必要なし。
 型名(以下の例だと VARCHAR)に、[]、をつけてやれば、それで(上限なしの)配列として定義されるようです。

postgres=# CREATE TABLE tab1(
postgres(#     no NUMERIC(5),
postgres(#     list VARCHAR[]
postgres(# )
postgres-# ;
CREATE TABLE

 insert は「array[データの列挙]」か、「'{データの列挙}'」で書ける模様。
 ただ「'{データの列挙}'」の場合、文字はシングルクォートで括らずダブルクォートで括るようです。

postgres=# INSERT INTO tab1 VALUES (10, '{"AA", "BB", "CC", "DD", "EE"}');
INSERT 0 1
postgres=# INSERT INTO tab1 VALUES (11, ARRAY['A1', 'B1', 'C1', 'D1', 'E1']);
INSERT 0 1
postgres=# INSERT INTO tab1 VALUES (12, ARRAY['A2', 'B2', 'C2']);
INSERT 0 1
postgres=# INSERT INTO tab1 VALUES (13, ARRAY['Z3', 'B2', 'C2']);
INSERT 0 1

 psql.exe 上で select してみるとこんな感じ。
 Oracle の場合と大差ない感じですね。

postgres=# SELECT * FROM tab1;
 no |       list
----+------------------
 10 | {AA,BB,CC,DD,EE}
 11 | {A1,B1,C1,D1,E1}
 12 | {A2,B2,C2}
 13 | {Z3,B2,C2}
(4 行)

 そして、全行の配列要素(=index)が 2 のものだけ抽出…、というのは、Oracle と違い、あっさり、かつ直感的にかけてしまいます(汗
 このあたりは Oracle はぜひ見習ってほしい…

postgres=# SELECT no, list[2] FROM tab1;
 no | list
----+------
 10 | BB
 11 | B1
 12 | B2
 13 | B2
(4 行)





カテゴリー: PostgreSQL, データベース

Follow comments via the RSS Feed | Leave a comment | Trackback URL

コメントを投稿する

日本語が含まれない投稿は無視されますのでご注意ください。(スパム対策)


«   »
 
Powered by Wordpress and MySQL. Theme by Shlomi Noach, openark.org