2016-08-21 60 views
3

我传递一个字符串作为参数(通过massivejs)到我的查询中。该字符串格式为:param = 'red, blue, green'。该参数本身并没有固定的长度(','是分隔符),因为它通过用户发送的内容填充(但最多可填充10个元素)。如何多分割字符串(WHERE IN查询)

我如何将字符串分解成查询内的单个字符串?

例如我试图做的事:

SELECT * FROM table 
WHERE name IN (param); 

我知道这工作,但很很简陋:

SELECT * FROM table 
WHERE name IN (split_part(param, ',', 1), split_part(param, ',', 2) .......)) -- keep going. 

基本上我想有(“红”,“蓝” ,'绿色'...)在IN括号内。有没有更好的方法来完成这个?

回答

1

您可以使用string_to_array函数将字符串分割到一个数组,然后使用any函数来检查,如果你的元素包含在它:

SELECT * 
FROM mytable 
WHERE name = ANY(STRING_TO_ARRAY(param, ',')); 
+1

完美的作品谢谢!快速跟进:我将如何调整这个来处理整数?那就是如果表格有整数。有什么像to_number在这里适用? – Suman

+1

@SumanBhattarai在这种情况下,我会将该列转换为字符串,以便将苹果与苹果进行比较。 AFAIK,Postgres没有一个方便的方法来将一个函数应用到数组中的所有元素。 – Mureinik