【问题标题】:How to ignore the condition that user did not pass in SQLITE?如何忽略用户未通过 SQLITE 的条件?
【发布时间】:2021-01-13 13:31:43
【问题描述】:

我正在用 SQLITE+FLASK 做我的 crm 项目。我需要一个功能是让用户输入条件来归档结果。

我希望我的SQL语句如果参数为空格或null,可以忽略WHERE条件。

例如,我的输入是“NAME”、“AGE”、“GENDER” 所以我的陈述将是

SELECT *
FROM CUSTOMER
WHERE NAME = 'James' AND AGE = '25' AND GENDER = 'M'

但我希望如果用户没有输入“NAME”,我的 SQL 语句可以类似于下面的代码

SELECT *
FROM CUSTOMER
WHERE AGE = '25' AND GENDER = 'M'

我知道也许我可以用字符串 concat 做到这一点,但我希望我可以通过 SQL 语句做到这一点。

【问题讨论】:

    标签: python sql sqlite


    【解决方案1】:

    您可以对每一列使用OR 运算符,同时检查您传递的参数值是NULL 还是带有空格的字符串:

    SELECT *
    FROM CUSTOMER
    WHERE (NAME = :name OR TRIM(COALESCE(:name, '')) = '')
      AND (AGE = :age OR TRIM(COALESCE(:age, '')) = '')
      AND (GENDER = :gender OR TRIM(COALESCE(:gender, '')) = '') 
    

    【讨论】:

      【解决方案2】:

      你可以使用如下的空条件:

      SELECT *
      FROM CUSTOMER
      WHERE (NAME = :name_input or :name_input is null)
        AND (AGE = :age_input or :age_input is null)
        AND (GENDER = :gender_input or :gender_input is null)
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2021-07-22
        • 1970-01-01
        • 2020-01-21
        • 2018-04-07
        • 2017-04-01
        • 2016-12-19
        • 2020-01-20
        • 2018-06-09
        相关资源
        最近更新 更多