簡體   English   中英

向 where 子句添加條件

[英]Adding conditions to where clause

如果參數具有值,我將如何編寫僅包含 where 子句中的條件的 sql 語句(如果參數具有有效值,我只想在 where 子句中包含 field2 檢查)

SELECT *  FROM abc
WHERE if(:param1 has a value that is not null or white space) then field1 = :param1   
AND   if(:param2 has a value that is not null or white space) then field2 = :param2   
AND   if(:param3 has a value that is not null or white space) then field3 = :param3   
AND   if(:param4 has a value that is not null or white space) then field4 = :param4  
AND   if(:param5 has a value that is not null or white space) then field5 = :param5  

一個典型的方法使用or對參數進行顯式NULL比較:

SELECT *
FROM abc
WHERE (:param1 is null OR field1 = :param1) AND
      (:param2 is null OR field2 = :param2) AND
      (:param3 is null OR field3 = :param3) AND
      (:param4 is null OR field4 = :param4) AND
      (:param5 is null OR field5 = :param5) ;

如果您特別希望空格的行為與NULL相同,那么這會變得更加復雜。 就像是:

WHERE (NULLIF(REPLACE(:param1, ' '), '') is null OR field1 = :param1) AND
      (NULLIF(REPLACE(:param2, ' '), '') is null OR field2 = :param2) AND
      (NULLIF(REPLACE(:param3, ' '), '') is null OR field3 = :param3) AND
      (NULLIF(REPLACE(:param4, ' '), '') is null OR field4 = :param4) AND
      (NULLIF(REPLACE(:param5, ' '), '') is null OR field5 = :param5) ;

但是,我認為在傳入參數之前將空字符串轉換為NULL會更常見,因此 SQL 只會將NULL作為特殊值使用。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM