从字符串创建表

问题描述:

我正在使用Postgres 8.3.11。我有一个表,如:从字符串创建表

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

我想什么是显而易见的

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

我创建了一个获得像“巴西,德国”,并将其作为一个单列表中的字符串函数:

|germany| 
    |brazil | 

我可以使用光标通过排走行,并执行它来得到我想要的东西,但必须有一个更好的SQL十岁上下的方式。

+0

如果您已经有了一个函数来取代列表,为什么不简单地将结果加入到基表中呢?顺便说一句:使用当前版本的PostgreSQL会容易得多。 8.3即将退休! – 2012-08-01 09:14:20

+0

每一行都有不同的结果,那么“简单加入结果”是什么意思? – harelg 2012-08-01 13:07:34

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 

随着短字符串这仍然是在9.1的PostgreSQL优选的解决方案。

尽管如此,regexp_split_to_table()的性能会随着较长的字符串而降低。用8.4+代替unnest(string_to_array(...))

因为抛开PostgreSQL 8.3变老。考虑upgrading to the current version 9.1(9.2即将发布)。