在SQL IN子句中使用

时间:2016-11-23 17:26:24

标签: sql regex oracle between

有没有办法在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分隔值,但我可以使用它来比较值是否在范围之间。

1 个答案:

答案 0 :(得分:2)

您可以在BETWEEN条件中使用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;

祝你好运。