在 Postgres 中将数组转换为行



如果我在SQL语句('A','B','C')中有这样的东西,我如何将其转换为具有多行的列,如下所示

col
---
A
B
C

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

有什么帮助吗?

更新 1

我有PostgreSQL 8.4.20

您可以从VALUES创建一个ARRAY,然后将其取消嵌套:

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的答案,这样你就可以将你的字符串连接到SQL语句中:

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

内置的regexp_split_to_table函数将为您执行此操作。由于您打算直接注入它而不逃逸,请使用 thibautg 答案中的$$(美元引用(。

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

相关内容

  • 没有找到相关文章

最新更新