从字符串创建表

时间:2012-08-01 08:06:40

标签: sql postgresql

我正在使用Postgres 8.3.11。我有一张表:

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

我想要的是显而易见的

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

我创建了一个函数,它获取了一个像'brazil,germany'这样的字符串,并将其作为单个列表输出:

   |germany|
   |brazil |

我可以使用游标逐行进行并执行它以获得我想要的东西,但必须有更好的SQL-ish方式。

1 个答案:

答案 0 :(得分: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正在变老。考虑upgrading to the current version 9.1(即将发布9.2)。