0

私はPostgres8.3.11を使用しています。私は次のようなテーブルを持っています:

user | countries (varchar(100))
  h  | us
  g  | brazil,germany

私が欲しいのは明らかです

user | countries
  h  | us
  g  | brazil
  g  | germany

'brazil、germany'のような文字列を取得し、それを単一列テーブルとして出力する関数を作成しました。

   |germany|
   |brazil |

カーソルを使用して行ごとに移動し、実行して必要なものを取得できますが、SQL風のより良い方法が必要です。

4

1 に答える 1

1

regexp_split_to_table()(8.3 で Postgres を提示) はこれを簡単にするはずです:

SELECT usr, regexp_split_to_table(countries, ',') AS country FROM tbl;

結果:

 usr | country
-----+---------
 h   | us
 g   | brazil
 g   | germany

短い文字列の場合、これは PostgreSQL 9.1 の推奨ソリューションです。

ただし、文字列が長くなるとのパフォーマンスがregexp_split_to_table()低下します。8.4+unnest(string_to_array(...))では代わりに使用します。

余談ですが、PostgreSQL 8.3 は古くなりつつあります。現在のバージョン 9.1 へのアップグレードを検討してください(9.2 はまもなくリリースされます)。

于 2012-08-01T20:46:52.173 に答える