0

我正在使用 Postgres 8.3.11。我有一张像这样的桌子:

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

我想要的是显而易见的

user | countries
  h  | us
  g  | brazil
  g  | 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 回答