簡體   English   中英

SQL Server where子句中的where列為null

[英]SQL Server where column in where clause is null

假設我們有一個名為IdWeather列的Data表。 該表中的其他列對於此問題並不重要。 Weather列可以為空。

我想顯示Weather符合條件的所有行,但是如果weather有空值,則顯示空值。

到目前為止,我的SQL:

SELECT * 
FROM Data d
WHERE (d.Weather LIKE '%'+COALESCE(NULLIF('',''),'sunny')+'%' OR d.Weather IS NULL)

我的結果是錯誤的,因為如果條件不正確,該語句還會顯示Weather為null的值(假設用戶鍵入錯誤)。

我找到了類似的主題,但是找不到合適的答案。 當字段具有NULL值時,SQL WHERE子句不返回行

請幫幫我。

對於將NULL視為匹配項的一般任務,您的查詢是正確的。 如果希望在沒有其他結果時抑制NULL ,則可以在查詢中添加AND EXISTS ...條件,如下所示:

SELECT * 
FROM Data d
WHERE d.Weather LIKE '%'+COALESCE(NULLIF('',''),'sunny')+'%'
   OR (d.Weather IS NULL AND EXISTS (SELECT * FROM Data dd WHERE dd.Weather LIKE '%'+COALESCE(NULLIF('',''),'sunny')+'%'))

附加條件確保僅當存在其他匹配記錄時,才將NULL視為匹配項。

您還可以使用公用表表達式來避免重復查詢,如下所示:

WITH cte (id, weather) AS
(
    SELECT * 
    FROM Data d
    WHERE d.Weather LIKE '%'+COALESCE(NULLIF('',''),'sunny')+'%'
)
SELECT * FROM cte
UNION ALL
SELECT * FROM Data WHERE weather is NULL AND EXISTS (SELECT * FROM cte)

語句還顯示如果條件不正確的情況下Wether為null的值(假設用戶輸入的sunny錯誤)。

這表明恆定的'sunny'來自最終用戶的輸入。 在這種情況下,您需要參數化查詢以避免SQL注入攻擊

暫無
暫無

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

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