2016-11-23 49 views
0

是否有任何方法可以在sql的IN子句中使用範圍。在SQL IN子句中使用

我有一個場景,其中我在像列的值:

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; 

我得到用RegEx分隔的值,但我可以用它們來比較值是否在範圍之間。

+0

不,這不是'如何'的工作。只需使用'> ='和'<='。 –

+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

是 - 請參閱編輯的答案。 –