Postgres拆分,因为它可以用于IN子句

时间:2014-01-23 14:20:31

标签: sql postgresql

我使用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

1 个答案:

答案 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中也应如此。