在 SQL IN 子句中使用 between

Posted

技术标签:

【中文标题】在 SQL IN 子句中使用 between【英文标题】:Using between in the SQL IN clause 【发布时间】:2016-11-23 17:26:23 【问题描述】:

有什么办法可以在sql的IN子句中使用范围。

我有一个场景,列中的值如下:

BIN_1_1
111111 - 222222  

用户输入一个值,例如; 111134,我需要检查输入的值是否在列值的范围内。

有没有什么方法可以在里面使用IN语句和使用between呢?

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

【问题讨论】:

不,in 不是这样工作的。只需使用>=<= 我该如何嵌入 >= 和 如果111111222222 位于INT 的不同列中,这会容易得多。事实上,任何东西都可以在允许值111111 - 222222 的列中,这使得解决这个问题的许多方法非常脆弱。 【参考方案1】:

您可以在 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;

祝你好运。

【讨论】:

我有多个 bin 列 - bin_1_2、bin_1_3 等等。我应该用 OR 分隔它吗?

以上是关于在 SQL IN 子句中使用 between的主要内容,如果未能解决你的问题,请参考以下文章

在 SQL IN 子句中使用 between

在动态 SQL 的“IN”子句中使用 CSV 字符串值

如何在 IN 子句 sql informix 中使用参数

在 SQL“IN”子句中使用元组

在 Java 的 JCR-SQL2 中使用 IN 子句

Databricks getArgument 值不能在 Spark SQL IN 子句中使用