将数据集转换为单个列

时间:2018-03-09 07:16:49

标签: sql postgresql

假设我将这组整数括在括号中(1,2,3,4,5)。

我有数据:

(1,2,3,4,5)

我希望他们在一个专栏中。

预期产出:

 column 
--------
      1
      2
      3
      4
      5
(5 rows)

我该怎么做?我尝试过使用数组然后不用但没有运气。我知道我做错了什么。 我需要这个来优化使用大型IN语句的查询,我想把它放在临时表中然后将它连接到主表上。

1 个答案:

答案 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[]);