[解決済み] カンマで区切られた列のデータを、さらに別の列に分割する
2023-07-02 11:58:43
質問
カラムにカンマ区切りのデータが入っています。
Column
-------
a,b,c,d
カンマで区切られたデータを複数の列に分割して、このような出力を得たいのですが。
Column1 Column2 Column3 Column4
------- ------- ------- -------
a b c d
どうすれば実現できるのか?
どのように解決するのですか?
CSVのフィールド数が一定であれば、次のような方法があります。
select a[1], a[2], a[3], a[4]
from (
select regexp_split_to_array('a,b,c,d', ',')
) as dt(a)
例えば
=> select a[1], a[2], a[3], a[4] from (select regexp_split_to_array('a,b,c,d', ',')) as dt(a);
a | a | a | a
---+---+---+---
a | b | c | d
(1 row)
CSVのフィールド数が一定でない場合は、以下のような方法で最大フィールド数を取得することができます。
select max(array_length(regexp_split_to_array(csv, ','), 1))
from your_table
をビルドし、適切な
a[1], a[2], ..., a[M]
カラムのリストを作成します。つまり、上記で最大6個となった場合、これを使うことになります。
select a[1], a[2], a[3], a[4], a[5], a[6]
from (
select regexp_split_to_array(csv, ',')
from your_table
) as dt(a)
必要であれば、これら2つのクエリを1つの関数にまとめることができます。
例えば、このようなデータを与えてみましょう(最後の行がNULLですね)。
=> select * from csvs;
csv
-------------
1,2,3
1,2,3,4
1,2,3,4,5,6
(4 rows)
=> select max(array_length(regexp_split_to_array(csv, ','), 1)) from csvs;
max
-----
6
(1 row)
=> select a[1], a[2], a[3], a[4], a[5], a[6] from (select regexp_split_to_array(csv, ',') from csvs) as dt(a);
a | a | a | a | a | a
---+---+---+---+---+---
1 | 2 | 3 | | |
1 | 2 | 3 | 4 | |
1 | 2 | 3 | 4 | 5 | 6
| | | | |
(4 rows)
デリミタは単純な固定文字列なので
string_to_array
の代わりに
regexp_split_to_array
:
select ...
from (
select string_to_array(csv, ',')
from csvs
) as dt(a);
おかげさまで マイケル に感謝します。
可能な限り CSV カラムを使用しないように、データベース スキーマを再設計する必要があります。代わりに配列カラムまたは別のテーブルを使用すべきです。
関連
-
[解決済み] リストを均等な大きさの塊に分割するには?
-
[解決済み] Bashで文字列をデリミターで分割するには?
-
[解決済み] Javaで文字列を分割する方法
-
[解決済み] カンマ区切りの文字列を配列に変換するにはどうすればよいですか?
-
[解決済み] Bashで文字列を配列に分割する方法は?
-
[解決済み] PostgresでInsert文のUUIDを生成する?
-
[解決済み】データフレームの文字列カラムを複数カラムに分割する
-
[解決済み】カンマで区切られた文字列を個別の行に変換する方法
-
[解決済み】Pandasのリストの列を複数の列に分割する
-
[解決済み] カラム内のカンマ区切り文字列を別の行に分割する
最新
-
nginxです。[emerg] 0.0.0.0:80 への bind() に失敗しました (98: アドレスは既に使用中です)
-
htmlページでギリシャ文字を使うには
-
ピュアhtml+cssでの要素読み込み効果
-
純粋なhtml + cssで五輪を実現するサンプルコード
-
ナビゲーションバー・ドロップダウンメニューのHTML+CSSサンプルコード
-
タイピング効果を実現するピュアhtml+css
-
htmlの選択ボックスのプレースホルダー作成に関する質問
-
html css3 伸縮しない 画像表示効果
-
トップナビゲーションバーメニュー作成用HTML+CSS
-
html+css 実装 サイバーパンク風ボタン
おすすめ
-
postgresql 重複データ削除 ケーススタディ
-
Postgresqlの行から列への高度な応用と要約のアイデア
-
Postgresqlの高度なアプリケーションは、セルのアイデアをマージするの詳細
-
PostgresqlのデータベーステーブルのデータをExcel形式にエクスポートする方法(推奨)
-
Postgresqlのシーケンススキップの問題を解決する
-
postgresqlのjsonbデータの問い合わせと変更方法
-
PostgreSQLで時間指定タスクを実装する4つの方法
-
[解決済み] PostgreSQLデータベースにアクティブな接続がある場合、そのデータベースを削除する方法は?
-
[解決済み] リレーションシップのパーミッションが拒否されました
-
[解決済み] varcharフィールドの型をintegerに変更する。"自動的にinteger型にキャストすることはできません"