2016-06-19 2 views
0

절에서 구문을 사용하려면 문자열에서 첫 번째 및 마지막 따옴표를 제거해야하는 쿼리가 있습니다. 나는 다음과 같은 쿼리 ::oracle translate 함수는 숫자로 변환 할 때 오류가 발생합니다.

with t as (
    select '1,2,3' x from dual) 
select translate(x, ' '||chr(39)||chr(34), ' ') from t 

를 실행하면이 결과> 1,2,3

을 제공하지만 다음 쿼리 ::

select * from care_topic_templates where care_topic_id in (
with t as (
     select '1,2,3' x from dual) 
    select translate(x, ' '||chr(39)||chr(34), ' ') from t 
); 

를 실행할 때이 오류를 제공>ORA-01722: invalid number.

답변

2

id과 같은 문자열을 '1,2,3'과 같이 비교하므로 translate()을 사용하는 이상한 대체 후에도이 문자열을 정수로 변환 할 수 없습니다. 문자열은 목록이 아닙니다.

당신은 당신이 like과 상관 하위 쿼리를 사용하여 원하는 일을 할 수 있습니다

select * 
from care_topic_templates 
where exists (select 1 
       from (select '1,2,3' as x from dual) x 
       where ',' || x || ',' like '%,' || care_topic_id || ',%' 
      ); 

또는 귀하의 경우 :

select * 
from care_topic_templates 
where exists (select 1 
       from (select '1,2,3' as x from dual) x 
       where ',' || translate(x, ' '||chr(39)||chr(34), ' ') || ',' like '%,' || care_topic_id || ',%' 
      ); 

이 당신의 쿼리의 논리를 따르고있다. 이 논리를 표현하는 다른 방법이 있습니다.

+0

고맙습니다. 이것은 큰 도움이됩니다. –

+0

동일한 결과를 위해 무엇을해야 할지를 제안 할 수는 있지만 –

+0

@SumonBappi 대신에 큰 따옴표를 사용해야합니다. . . 다른 질문을해야합니다. –

관련 문제