我使用Postgres 8.1。在我的子函数中,我返回一个字符串,其中一些ID被连接在一起。我需要拆分这些ID并在主选择查询的WHERE
子句中使用它们。
例如子功能:
subFunction( 'item_id' character varying )RETURNS character varying AS
-- implementation of sub function---
return concatenatedString;
这个concatenatedString是这样的:23 | 32 | 25 | 234。
在我的主查询中
SELECT * FROM tableName WHERE id IN (--need to get ids returning from sub function splitting the string--) .
有没有办法可以拆分子函数返回的字符串,并将结果放入IN
子句。
解决此问题的另一种方法: Split PostgreSQL Query filtering
答案 0 :(得分:1)
正如@JustBob在他的评论中所说,你最好的选择是升级到更新的postgresql版本,之后你可以使用regexp_split_to_table,或者regexp_split_to_array,然后使用数组运算符,例如。
SELECT * FROM tablename WHERE id = ANY (regexp_split_to_array(subFunction(...), '\|'));
然而,幸运的是,你的字符串类似于交替正则表达式,所以你可能只能逃脱这个:
SELECT * FROM tablename WHERE id::text ~ '^(' || subFunction(...) || ')$';
这将对正如此
的正则表达式进行正则表达式匹配^(23|32|25|234)$
如果你的id值在列表中,它将返回true。
即使在8.1中也应如此。