在Postgres中将逗号分隔的字符串转换为整数数组

23

我正在尝试将逗号分隔的字符串转换为整数数组(integer []),以在Where子句中使用。

我尝试过cast,::Int但都没有成功。感谢您的建议

示例

Table A   |  Table B
ID        |  Set_id
2         |  14,16,17
1         |  15,19,20
3         |  21

我的查询:

Select * 
from Table a, table b 
where a.id in b.set_id

这是一个可怕的设计。你为什么要这样做? - user330315
3个回答

50

如果您想将字符串用作连接条件,您需要将其转换为适当的整数数组。

Select * 
from Table a
  join table b on a.id = any(string_to_array(b.set_id, ',')::int[]);
但是,一个更好的解决方案是正确地对表进行规范化(或者至少将这些ID存储在整数数组中,而不是varchar列中)。

2
当一些原始数据以“1,23,456”的形式存储在某个文件中时,就可能发生这种情况。您必须将这些数据转换为整数数组,以减少存储空间的使用并提高性能。 - Kemin Zhou

9
Select * from Table_a a, table_b  b
where a.id = any(regexp_split_to_array(b.set_id,',')::int[]);

6
您可以使用unnest()函数。 unnest函数是用于将数组扩展为一组行。
使用unnest(string_to_array(b.set_id,',') :: int [])选择* from Table_a a,table_b b where a.id in ;

欢迎来到Stack Overflow。没有任何解释的代码转储很少有帮助。Stack Overflow是关于学习的,而不是提供盲目复制和粘贴的片段。请[编辑]您的问题并解释它如何回答正在问的具体问题。请参见[答案]。当回答旧问题(这已经接近4年了)时,这尤其重要,因为已经存在答案。这如何改进已经存在的内容? - Chris

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接