如果我在SQL语句('A','B','C')
中有类似的内容,如何将其转换为具有多行的列
col
---
A
B
C
我无法改变创建字符串的方式(因为它从外部程序注入到SQL查询中)。例如,我无法将其设为['A','B','C']
(替换为方括号)。我可以用[('A','B','C')]
或其他任何方式包裹它周围的任何东西。
任何帮助?
更新1
我有PostgreSQL 8.4.20
答案 0 :(得分:1)
内置regexp_split_to_table
功能会为您完成此操作。由于您计划直接注入而不进行转义,因此请使用$$
中的dollar quoting(thibautg'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'),
''','''
);