如何在pgsql select query中用逗号/单引号替换逗号? 我目前的疑问是:
SELECT array_to_string(array_agg(districtname), ', ') as dnames
FROM districts
where id in ('' || Replace((select districtIds from tblmtr where id = 1), ',' , ''',''') || '');
它返回null
表tblmtr
中的ID与此类似2
,3
,4
当我将其更改为2
或3
或4
时,会返回正确的结果。
结果应如下所示:district1name,district2name,district3name
答案 0 :(得分:1)
这里有几件事情并不理想:
升级到Postgres的现代版本。 Version 8.4 reached EOL in 2014.
查看database normalization并重新考虑您的关系设计。在逗号分隔的字符串中存储多个ID值通常是一个非常的坏主意。
IN
需要subquery或list of values。您似乎尝试提供包含值的字符串,但这不起作用。考虑使用JOIN
代替您笨拙的IN
构造。
虽然您遇到了不幸的设计,但请将逗号分隔的字符串动态转换为数组并使用ANY
construct。
你忽略了提供你的表定义,所以做了一些假设。
SELECT array_to_string(array_agg(d.districtname), ', ') AS dnames
FROM tblmtr t
JOIN districts d ON d.id = ANY (string_to_array(t.districtIds, ','))
WHERE t.id = 1;
或者:
SELECT ARRAY (
SELECT d.districtname
FROM tblmtr t
JOIN districts d ON d.id = ANY (string_to_array(t.districtIds, ','))
WHERE t.id = 1
) AS dnames;