在 Postgres 中将数组转换为行

HP.*_*HP. 5 sql postgresql postgresql-8.4

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

col
---
 A
 B
 C
Run Code Online (Sandbox Code Playgroud)

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

有什么帮助吗?

更新1

我有 PostgreSQL 8.4.20

thi*_*utg 4

您可以创建一个ARRAYfromVALUES然后解除它的嵌套:

SELECT 
    unnest(ARRAY[col_a, col_b, col_c]) 
FROM 
    (VALUES('A','B','C')) AS x(col_a, col_b, col_c)
Run Code Online (Sandbox Code Playgroud)

结果:

| unnest |
|--------|
|      A |
|      B |
|      C |
Run Code Online (Sandbox Code Playgroud)

编辑:您还可以通过使用美元引号 ( ) 来调整jspcal 的答案,$$如下所示,以便您可以将字符串连接到 SQL 语句中:

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