我正在使用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方式。
答案 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)。