从字符串创建表
问题描述:
我正在使用Postgres 8.3.11。我有一个表,如:从字符串创建表
user | countries (varchar(100))
h | us
g | brazil,germany
我想什么是显而易见的
user | countries
h | us
g | brazil
g | germany
我创建了一个获得像“巴西,德国”,并将其作为一个单列表中的字符串函数:
|germany|
|brazil |
我可以使用光标通过排走行,并执行它来得到我想要的东西,但必须有一个更好的SQL十岁上下的方式。
答
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即将发布)。
如果您已经有了一个函数来取代列表,为什么不简单地将结果加入到基表中呢?顺便说一句:使用当前版本的PostgreSQL会容易得多。 8.3即将退休! – 2012-08-01 09:14:20
每一行都有不同的结果,那么“简单加入结果”是什么意思? – harelg 2012-08-01 13:07:34