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

値はRegExで区切られていますが、その間にある値が範囲内にあるかどうかを比較するために使うことができます。

+0

いいえ、それは 'in'の仕組みではありません。単に '> ='と '<='を使用してください。 –

+0

> =と<=をどのように埋め込むのですか? –

+1

'111111'と' 222222'が 'INT'の別々の列にあった方がはるかに簡単です。そのままでは、値が '111111 - 222222'となるようなものがあれば、非常に壊れやすい方法を作るための多くの方法があります。 –

答えて

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; 

+0

私は複数のbin列を持っています - bin_1_2、bin_1_3など。 ORで区切りますか? –

+0

はい - 編集された回答を参照してください。 –