2010-01-18 25 views
8

捕獲NULL值我想用一些新值替換Adventureworks數據庫的Person.Contact中的值。下面的查詢語句對其他值工作正常,但我無法更改那些值爲NULL的值。我正在使用SQL Server。任何幫助表示讚賞。如何在此查詢中使用case語句

 
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 

回答

10

我會使用ISNULL函數 - 如果該字段爲空,它將返回給定的值:

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 
+0

錯誤的NULL情況下。 – 2010-01-18 09:59:10

+0

@Johan:我的錯 - 修好了。現在它應該可以正常工作。 – 2010-01-18 10:03:11

+6

我同意。我們只希望沒有人有'NULLVALUE'作爲中間名。 – 2010-01-18 10:06:42

15
case 
when MiddleName is null then ... 
when MiddleName = 'R' then ... 
end 
2

對不起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 
+2

Firebird也沒有['is null'](http://stackoverflow.com/a/2085129/11683)(與'isnull'相反)? – GSerg 2017-01-12 18:50:18

+1

非常感謝。如果使用Interbase時遇到同樣的問題,那就是沒有ISNULL,但代碼正常工作! – SovereignSun 2017-01-18 10:56:59

+0

@GSerg Firebird可能,但我在InterBase工作...... Firebird似乎有更多的功能,但任何在InterBase中工作的東西都應該在Firebird中工作,而不是相反。 此外,我看到了各種鏈接來爲ISNULL設置自己的UDF,但這似乎超出了我所需要做的。 – eromrab 2017-01-20 15:35:08