将数组转换为Postgres中的行

时间:2018-05-22 20:53:39

标签: sql postgresql postgresql-8.4

如果我在SQL语句('A','B','C')中有类似的内容,如何将其转换为具有多行的列

col
---
 A
 B
 C

我无法改变创建字符串的方式(因为它从外部程序注入到SQL查询中)。例如,我无法将其设为['A','B','C'](替换为方括号)。我可以用[('A','B','C')]或其他任何方式包裹它周围的任何东西。

任何帮助?

更新1

我有PostgreSQL 8.4.20

2 个答案:

答案 0 :(得分:1)

内置regexp_split_to_table功能会为您完成此操作。由于您计划直接注入而不进行转义,因此请使用$$中的dollar quotingthibautg's answer)。

select * from regexp_split_to_table(
    regexp_replace($$('A','B','C')$$, '^\(''|''\)+', '', 'g'),
    ''','''
);

答案 1 :(得分:1)

您可以从ARRAY创建VALUES,然后将其删除:

SELECT 
    unnest(ARRAY[col_a, col_b, col_c]) 
FROM 
    (VALUES('A','B','C')) AS x(col_a, col_b, col_c)

结果:

| unnest |
|--------|
|      A |
|      B |
|      C |

编辑:您还可以使用这样的美元引号($$)来调整jspcal's answer,这样您就可以将字符串连接到SQL语句中:

  SELECT * FROM regexp_split_to_table(
    regexp_replace(
      $$('A','B','C','D','foo')$$,
      '^\(''|''\)+', '', 'g'),
      ''','''
    );