簡體   English   中英

在when子句中替換MySQL查詢中的空值

[英]Replacing null values in MySQL query in when clause

我下面有一個MySQL表

CREATE TABLE Test(Name VARCHAR(30));

INSERT INTO Test VALUES ('Name1'), 
                        ('Name2'),
                        (null),
                        ('Name3'),
                        (null),
                        ('Name4');

現在,當該行為Null時,我希望它在前端顯示為空,否則該行中包含的值

我嘗試了以下查詢,但沒有用

SELECT CASE Name 
        WHEN NULL 
        THEN '' ELSE Name
       END AS Names
  FROM Test

輸出量

Name1
Name2

Name3

Name4

SQLFiddle的鏈接

謝謝您的回復

空值在SQL中是特殊的,您不能將它們視為普通表達式。 盡管您可以將NULL分配給列,但是您不能像將其作為正常值一樣與之進行比較。 如果兩個參數中的任何一個為NULL ,則所有比較函數都將返回NULL ,並將其視為false(因此NULL = NULL1 <> NULL均為false)。 您需要使用特殊表達式與NULL進行比較。 最基本的形式是<expression> IS NULL (或<expression> IS NOT NULL ),但是還有便捷函數IFNULL()COALESCE()

SELECT IFNULL(Name, '') AS Names
FROM Test

要么

SELECT CASE WHEN Name IS NULL
            THEN ''
            ELSE Name
       END AS Names
FROM Test

有關更多信息,請參見3.3.4.6。 在MySQL文檔中使用NULL值

只是要詳細說明為什么它不起作用。

NULL是一個值,比較不會產生真或假結果。 這是數據庫編程固有的三層邏輯的怪異之一。

NULL = NULL  

是不正確的。 這也不是錯誤的。 將一個值與NULL值進行任何比較的結果均為NULL結果,除非您使用內部SQL“ IS NULL ”運算符對其進行測試。

以CASE語句的形式,您正在使用:

CASE Value
   WHEN TestValue1 THEN xxx
   WHEN TestValue2 THEN yyy
END

針對一個值運行許多相等性測試。 不能以這種形式測試NULL,因為您不能對NULL進行相等測試。 案例的第二種形式:

CASE
   WHEN MyValue IS NULL THEN www
   WHEN Condition1 THEN xxx
   WHEN Condition2 THEN yyy
END

確實允許您使用IS NULL表達式,該表達式可以具有TRUE或FALSE值。 因此,當您想在CASE語句中執行NULL測試時,必須始終使用此形式。

另外,NULL測試應該是CASE語句中的第一項:因為將任何值與NULL進行比較都會有一個“不確定”(NULL)布爾值,否則,案例邏輯將無法正常工作。

暫無
暫無

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

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