我正在将MySQL表作为一个
CREATE TABLE Test(Name VARCHAR(30));
INSERT INTO Test VALUES ('Name1'),
('Name2'),
(null),
('Name3'),
(null),
('Name4');
现在当行为空时我希望它在前端显示为空,否则包含在行中的值
我尝试了以下查询但是没有用
SELECT CASE Name
WHEN NULL
THEN '' ELSE Name
END AS Names
FROM Test
输出
Name1
Name2
Name3
Name4
的链接
感谢回复
答案 0 :(得分:6)
Null值在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
有关更多信息,请参阅MySQL文档中的3.3.4.6. Working with NULL Values。
答案 1 :(得分:1)
只是详细说明为什么这不起作用。
NULL是一个值,对于该值,比较既不会产生true也不会产生false。这是数据库编程固有的三层逻辑的奇特之处。
NULL = NULL
不是真的。这也不错。除非您使用内部SQL“IS NULL
”运算符来测试它,否则将一个值与NULL值进行任何比较的结果都是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)布尔值,否则案例的逻辑将无法正常工作。