2016-11-23 5 views
0

SQL의 IN 절에서 범위를 사용할 수있는 방법이 있습니까?SQL IN 절에서 between 사용

난 같은 열에있는 값을 시나리오를 가지고, 사용자가 값을, 예를 들면 입사

BIN_1_1 
111111 - 222222 

단계; 111134, 입력 된 값이 열 값의 범위 내에 있는지 확인해야합니다.

IN 문을 사용하고 그 사이에 사용할 수있는 방법이 있습니까?

FOR i in (select * from V_CUS_SEG_BIN_RANGE) LOOP  
    IF v_input1 IN 
     (REGEXP_SUBSTR(i.bin_1_1, '[^-]+', 1, 1), REGEXP_SUBSTR(i.bin_1_1, '[^-]+', 1, 2) 
    THEN 
     dbms_output.put_line('Duplicate!'); 
END LOOP; 

나는 정규식으로 구분 값을 얻을 수 있지만 값이 범위 사이에있는 경우 비교하는 사이에 사용할 수 있습니다.

+0

아니요, 'in'이 작동하는 방식이 아닙니다. 단지'> ='와'<='를 사용하십시오. –

+0

정확히 => 및 <=를 어떻게 포함합니까? –

+1

'111111'과'222222'가'INT'의 분리 된 컬럼에 있다면 훨씬 쉬울 것입니다. 그대로라면, 열에는 111111 - 222222 값을 허용하는 모든 것이 포함될 수 있습니다. 이는 매우 취약한 많은 해결 방법을 만듭니다. –

답변

2

당신은 같이 조건 사이에 REGEXP_SUBSTR 호출의 결과를 사용할 수 있습니다

IF v_input1 BETWEEN REGEXP_SUBSTR(i.bin_1_1, '[^-]+', 1, 1) 
       AND REGEXP_SUBSTR(i.bin_1_1, '[^-]+', 1, 2) OR 
    v_input1 BETWEEN REGEXP_SUBSTR(i.bin_1_2, '[^-]+', 1, 1) 
       AND REGEXP_SUBSTR(i.bin_1_2, '[^-]+', 1, 2) OR 
    v_input1 BETWEEN REGEXP_SUBSTR(i.bin_1_3, '[^-]+', 1, 1) 
       AND REGEXP_SUBSTR(i.bin_1_3, '[^-]+', 1, 2) 
THEN 
    ...whatever... 
END IF; 

행운을 빕니다.

+0

bin 열이 여러 개 있습니다 - bin_1_2, bin_1_3 등등. OR (으)로 분리합니까? –

+0

예 - 편집 된 답변을 참조하십시오. –