代码之家  ›  专栏  ›  技术社区  ›  Kar B

如何识别SQL中两列数字范围内的数字

  •  -2
  • Kar B  · 技术社区  · 2 年前

    我有一个表,有两列a和b。我想写一个查询来搜索该列中是否有可用的数字,或者该数字位于这两列之间。我尝试使用>=<=也带有between,但不返回任何结果。

    有人能帮我查询一下吗?

    • 如果输入参数为1,则应返回true。
    • 如果输入参数为3,则应返回true。
    • 如果输入参数为7,则应返回true。
    • 如果输入参数为15,则应返回false。

    谢谢

    包含值和预期输出的表:

    Table with values and expected output

    2 回复  |  直到 2 年前
        1
  •  0
  •   Sash Sinha    2 年前

    假设你有几张桌子,如下所示:

    CREATE TABLE number_ranges (
        A INT,
        B INT
    );
    
    INSERT INTO number_ranges (A, B) VALUES (1, 1), (2, 2), (3, 3), (5, 10), (20, 100);
    
    CREATE TABLE search_inputs (
        `Search(Input)` INT
    );
    
    INSERT INTO search_inputs (`Search(Input)`) VALUES (1), (3), (7), (15);
    

    您可以使用 BETWEEN , CASE EXISTS 以实现您想要的输出:

    SELECT 
        si.`Search(Input)`,
        CASE 
            WHEN EXISTS (
                     SELECT 1 
                     FROM number_ranges nr 
                     WHERE si.`Search(Input)` BETWEEN nr.A AND nr.B
                 )
            THEN 'TRUE'
            ELSE 'FALSE'
        END AS Output
    FROM search_inputs si;
    

    输出:

    搜索(输入) 输出
    1. 符合事实的
    3. 符合事实的
    7. 符合事实的
    15 错误的
        2
  •  0
  •   jarlh    2 年前

    SQL Server答案:

    select max(case when yournumber between A and B then 'true' else 'false' end)
    from tablename
    

    ANSI/ISO SQL答案:

    select max(yournumber between A and B) from tablename
    

    如果您的数字等于A或B,或介于A和B之间,则表中该行的值为TRUE,否则为FALSE。

    MAX() 如果至少有一行为TRUE,则获取TRUE。如果没有一个是真的,你就会得到假。

    (如果A可以大于B,则执行 between symmetric .)