【PostgreSQL】SQLにてカンマ区切りで格納されているデータを分割する

筆者もたまに使う関数なのですが、度々忘れるので備忘録的な意味合いもこめて記事として残しておきます。

【PostgreSQL】SQLにてカンマ区切りで格納されているデータを分割する

今回使用した環境

インターネット接続可能のオンラインの環境

64 ビット オペレーティング システム

Windows 10 22H2

PostgreSQL 14.4

実現したいこと

以下のような1つのカラムにカンマ区切りで複数の値がある時、それを複数の列に分割します。

テーブル定義とデータ

テーブルは以下を使います。

create table tbl_food (
    code character varying(4)   --コード
  , names character varying(50) --名前 (複数)
);

データは以下を使います。

insert into tbl_food(code, names) values 
 ('0001','りんご,みかん,オレンジ')
,('0002','ピーマン,かぼちゃ,ほうれん草,トマト')
;

抽出のSQL

split_partの関数を使います。第3引数の数字は1から指定可能となっています。

select code
      ,split_part(names, ',', 1)
      ,split_part(names, ',', 2)
      ,split_part(names, ',', 3)
      ,split_part(names, ',', 4)
from tbl_food;

動作確認

こちら、SQLの実行結果です。

特筆すべき点は1レコード目に名前4の値は存在していませんが、名前4の値はnullではなく空文字となっていることですね。whereの条件指定で絞込をしたい場合、ご注意ください。

※ただし、namesの項目そのものがnullだった場合、split_partの返す値もnullとなります。


以上となります。

ここまでお読みいただきありがとうございました。

PostgreSQL

Posted by だゆう