[英]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 = NULL
和1 <> 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
只是要詳細說明為什么它不起作用。
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.