如果我在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'),
''','''
);