Postgres:将"name = value"值列表转换为表格

Chr*_*ian 3 sql postgresql

转换此字符串:

n1=10;n2=50;n3=60;n4=20
Run Code Online (Sandbox Code Playgroud)

使用这样的东西(在Postgres 9.x中):

select * 
  from (some_engine_to_convert_this('n1=10;n2=50;n3=60;n4=20')) t
Run Code Online (Sandbox Code Playgroud)

得到这样的结果:

Name Value
v1   10
v2   50
v3   60
v4   20
Run Code Online (Sandbox Code Playgroud)

PS:我无法创建任何功能,所以我只需要使用内置函数的Postgres.

提前致谢.

a_h*_*ame 5

select split_part(nv, '=', 1) as name,
       split_part(nv, '=', 2) as value
from (
  select unnest(string_to_array('n1=10;n2=50;n3=60;n4=20',';'))
) as t (nv);
Run Code Online (Sandbox Code Playgroud)

string_to_array首先创建一个键/值对数组.unnest将其转换为行,然后使用从结果中提取键/值元素split_part.

或者unnest,string_to_array可以组合使用和组合,regexp_split_to_table但正则表达式函数通常较慢.不确定哪一个会更有效率.

SQLFiddle示例:http://sqlfiddle.com/#!15/d41d8/2991