我有一个类似下面的查询的结果,它没有固定数量的列
ID COL1 COL2 COL3 COL4
-------------------------------------
1 VAL11 VAL12 VAL13 VAL14
2 VAL21 VAL22 VAL23 VAL24
现在我希望结果是这样的。
RESULT
-----------------------------------------------------
ID:1, COL1:VAL11, COL2:VAL12, COL3:VAL13, COL4:VAL14
ID:2, COL1:VAL21, COL2:VAL22, COL3:VAL23, COL4:VAL24
请帮忙。
最佳答案
快速而肮脏的方法,但没有列名并包含 NULL 值:
SELECT tbl::text
FROM tbl;
缓慢而可靠的方式:
SELECT array_to_string(ARRAY[
'ID:' || id
,'COL1:' || col1
,'COL2:' || col2
], ', ') AS result
FROM tbl;
如果列包含 NULL
值,则结果中将丢失该列。我不只是连接,因为 NULL
值会使整行无效。
array_to_string()
确保只在需要的地方插入逗号。
PostgreSQL 9.1 引入了新函数 concat_ws()
(很像 MySQL 中的那个)我们可以进一步简化:
SELECT concat_ws(', '
'ID:' || id
,'COL1:' || col1
,'COL2:' || col2
) AS result
FROM tbl;
关于PostgreSQL 行到字符串,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10091360/