将数组转换为 Postgres 中的行
Convert array to rows in Postgres
如果我在 SQL 语句 ('A','B','C')
中有这样的内容,我如何将它转换成像这样的多行列
col
---
A
B
C
我无法更改字符串的创建方式(因为它是从外部程序注入到 SQL 查询中的)。例如,我不能将其设为 ['A','B','C']
(用方括号代替)。我可以在它周围包裹任何东西,比如 [('A','B','C')]
或其他任何东西。
有什么帮助吗?
更新 1
我有 PostgreSQL 8.4.20
内置regexp_split_to_table
function will do this for you. Since you plan to inject it directly without escaping, use $$
(dollar quoting) from .
select * from regexp_split_to_table(
regexp_replace($$('A','B','C')$$, '^\(''|''\)+', '', 'g'),
''','''
);
您可以从 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 |
编辑:您还可以像这样使用美元引号 ($$
) 调整 ,这样您就可以将字符串连接到 SQL 语句中:
SELECT * FROM regexp_split_to_table(
regexp_replace(
$$('A','B','C','D','foo')$$,
'^\(''|''\)+', '', 'g'),
''','''
);
如果我在 SQL 语句 ('A','B','C')
中有这样的内容,我如何将它转换成像这样的多行列
col
---
A
B
C
我无法更改字符串的创建方式(因为它是从外部程序注入到 SQL 查询中的)。例如,我不能将其设为 ['A','B','C']
(用方括号代替)。我可以在它周围包裹任何东西,比如 [('A','B','C')]
或其他任何东西。
有什么帮助吗?
更新 1
我有 PostgreSQL 8.4.20
内置regexp_split_to_table
function will do this for you. Since you plan to inject it directly without escaping, use $$
(dollar quoting) from
select * from regexp_split_to_table(
regexp_replace($$('A','B','C')$$, '^\(''|''\)+', '', 'g'),
''','''
);
您可以从 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 |
编辑:您还可以像这样使用美元引号 ($$
) 调整
SELECT * FROM regexp_split_to_table(
regexp_replace(
$$('A','B','C','D','foo')$$,
'^\(''|''\)+', '', 'g'),
''','''
);