假设我将这组整数括在括号中(1,2,3,4,5)。
我有数据:
(1,2,3,4,5)
我希望他们在一个专栏中。
预期产出:
column
--------
1
2
3
4
5
(5 rows)
我该怎么做?我尝试过使用数组然后不用但没有运气。我知道我做错了什么。 我需要这个来优化使用大型IN语句的查询,我想把它放在临时表中然后将它连接到主表上。
答案 0 :(得分:1)
您可以将字符串转换为数组,然后执行unfst:
select *
from unnest(translate('(1,2,3,4,5)', '()', '{}')::int[]);
translate()
调用会将'(1,2,3,4,5)'
转换为'{1,2,3,4,5}'
,这是数组的字符串表示形式。然后使用::int[]
将该字符串强制转换为数组。
你不需要临时表,你可以直接加入到不需要的结果。
select *
from some_table t
join unnest(translate('(1,2,3,4,5)', '()', '{}')::int[]) as l(id)
on t.id = l.id;
另一种选择是在where条件中简单地使用该数组:
select *
from some_table t
where t.id = any (translate('(1,2,3,4,5)', '()', '{}')::int[]);