2014-01-23 3 views
0

저는 Postgres 8.1을 사용합니다. 내 하위 함수에서 일부 ID를 함께 연결된 문자열을 반환합니다. 그리고 그 ID를 분리하고 주요 선택 쿼리에서 WHERE 절에 사용해야합니다. 예를 서브 함수Postgres는 IN 절에 사용할 수 있도록 분할되었습니다.

:

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 절에 결과를 넣을 수있는 방법이 있습니까.

또 다른 방법은이 문제를 해결하려면 다음 @JustBob 그의 의견에 말했듯이Split PostgreSQL Query filtering

+0

함수의 출력을 연결된 문자열에서 집합 반환 함수로 변경할 수 있습니까? – Kuberchaun

+0

또한 버전 8.1을 사용하면 안되며 더 이상 지원되지 않습니다. 최소한 8.4와 같은 지원되는 버전을 사용 중이라면 select regexp_split_to_table ('a | b | c | d', E '\\ |')을 사용할 수 있습니다. – Kuberchaun

+0

@JustBob : 답장을 보내 주셔서 감사합니다. 나는 '설정'과 그것을 구현할 수있는 방법에 대해 명확하지 않습니다. 정확하게 연결 문자열은 필요하지 않지만 작업을 완료해야합니다. 또한이 8.1 버전을 고수해야합니다. –

답변

1

이, 가장 좋은 건, 더 최근의 PostgreSQL 버전으로 업그레이드 할 후 다음 regexp_split_to_table, 또는 regexp_split_to_array 및 사용할 수있을 것 대신 배열 연산자를 사용하십시오.

SELECT * FROM tablename WHERE id::text ~ '^(' || subFunction(...) || ')$'; 

이 찾고 정규식에 대한 정규식 검색을 할 것입니다 : 당신은 그냥이 멀리 얻을 수있을 수 있도록

그러나
SELECT * FROM tablename WHERE id = ANY (regexp_split_to_array(subFunction(...), '\|')); 

는 다행히 당신을 위해, 당신의 캐릭터는, 교대 정규식과 유사 like

^(23|32|25|234)$ 

id 값이 목록에있는 경우 true를 반환합니다.

8.1에서도 작동합니다.

관련 문제