2010-01-18 10 views
8

qui in questa query Voglio sostituire i valori in Person.Contact del database Adventureworks con alcuni nuovi valori. La seguente dichiarazione di caso di query funziona correttamente per altri valori, ma non sono in grado di modificare i valori che sono in NULL. Sto usando SQL Server. Qualsiasi aiuto è apprezzato.come rilevare i valori NULL utilizzando l'istruzione 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 

risposta

10

userei la funzione ISNULL - verrà restituito il valore dato se il campo è 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 
+0

Errato nel caso NULL. –

+0

@Johan: colpa mia - risolto. Ora dovrebbe funzionare bene. –

+6

Sono d'accordo. Speriamo solo che nessuno abbia "NULLVALUE" come secondo nome. –

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

dispiace per pubblicare 7 anni più tardi, ma ho cercato per trovare una soluzione per Interbase/Firebird e questo post continuava a spuntare. Nessuna delle soluzioni qui funziona perché non c'è ISNULL, quindi ho pensato di aiutare qualcun altro che potrebbe venire qui a cercarlo:

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 non ha anche ['is null'] (http://stackoverflow.com/a/2085129/11683) (al contrario di' isnull')? – GSerg

+1

Grazie mille .. Ho avuto lo stesso problema con l'uso di Interbase che non ha ISNULL ma il tuo codice ha funzionato! – SovereignSun

+0

@GSerg Firebird potrebbe, ma stavo lavorando in InterBase ... Firebird sembra avere più funzioni, ma qualsiasi cosa funzioni in InterBase dovrebbe funzionare in Firebird, ma non viceversa. Inoltre, ho visto tutti i tipi di collegamenti per impostare la propria UDF per ISNULL, ma ciò mi è sembrato un po 'al di là di quello che dovevo fare. – eromrab

Problemi correlati