我写了一个类似这样的T-SQL语句(原始语句看起来不同,但我想在这里给出一个简单的例子):
SELECT first_name +
CASE last_name WHEN null THEN 'Max' ELSE 'Peter' END AS Name
FROM dbo.person
该语句没有任何语法错误,但如果last_name为null,则case子句始终选择ELSE-part。但是为什么呢?
我想要做的是统一first_name和last_name,但是如果last_name为null,那么整个名称就变成null:
SELECT first_name +
CASE last_name WHEN null THEN '' ELSE ' ' + last_name END AS Name
FROM dbo.person
你知道问题出在哪里吗?
发布于 2010-07-13 21:34:31
CASE WHEN last_name IS NULL THEN '' ELSE ' '+last_name END
发布于 2010-07-13 21:36:57
WHEN部分与==进行了比较,但不能真正与NULL进行比较。试一试
CASE WHEN last_name is NULL THEN ... ELSE .. END
相反,或者合并:
COALESCE(' '+last_name,'')
(‘’当last_name为NULL时,+last_name为NULL,因此在这种情况下应返回‘’)
发布于 2010-07-14 15:09:28
有很多解决方案,但没有一个解决方案涵盖了原始语句不起作用的原因。
CASE last_name WHEN null THEN '' ELSE ' '+last_name
在when之后,会检查是否相等,这应该是真或假。
如果比较的一个部分或两个部分为空,则比较的结果将是未知的,这在case结构中被视为false。请参阅:https://www.xaprb.com/blog/2006/05/18/why-null-never-compares-false-to-anything-in-sql/
为了避免这种情况,Coalesce是最好的方法。
https://stackoverflow.com/questions/3237646
复制相似问题