如何使用case语句捕获NULL值

rah*_*hul 9 sql sql-server

在这个查询中,我想用一些新的值替换Adventureworks数据库的Person.Contact中的值.以下查询case语句适用于其他值,但我无法更改NULL值.我正在使用SQL Server.任何帮助表示赞赏.

select contactid,Title,FirstName,MiddleName,
case MiddleName
when 'R.' then 'Robert'
when 'B.' then 'Bids'
when 'J.' then 'John'
when is null then 'New Name'
else 'No Name'
end, LastName from Person.Contact

GSe*_*erg 16

case 
when MiddleName is null then ...
when MiddleName = 'R' then ...
end
Run Code Online (Sandbox Code Playgroud)


mar*_*c_s 12

我将使用ISNULL函数 - 如果字段为NULL,它将返回给定的值:

select contactid,Title,FirstName,MiddleName,
case ISNULL(MiddleName, 'NULLVALUE')
when 'R.' then 'Robert'
when 'B.' then 'Bids'
when 'J.' then 'John'
when 'NULLVALUE' then 'New Name'
else 'No Name'
end, LastName from Person.Contact
Run Code Online (Sandbox Code Playgroud)

  • 我同意.让我们只希望没有人将'NULLVALUE'作为中间名. (8认同)
  • 像小鲍比 DROP TABLES 吗? (2认同)
  • @JohnDunagan 好吧,我们的危险性较小 (2认同)

小智 5

很抱歉 7 年后才发帖,但我一直在尝试寻找 Interbase / Firebird 的解决方案,而这篇文章不断出现。这里的解决方案都不起作用,因为没有 ISNULL,所以我想我会帮助其他可能来这里寻找这个问题的人:

select contactid,Title,FirstName,MiddleName,
case COALESCE(MiddleName, 'NULLVALUE')
when 'R.' then 'Robert'
when 'B.' then 'Bids'
when 'J.' then 'John'
when 'NULLVALUE' then 'New Name'
else 'No Name'
end, LastName from Person.Contact
Run Code Online (Sandbox Code Playgroud)

  • Firebird 也没有 [`is null`](http://stackoverflow.com/a/2085129/11683) (与 `isnull` 相反)? (2认同)