2016-11-23 106 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

是 - 请参阅编辑的答案。 –