2010-01-18 10 views
8

aquí en esta consulta Quiero reemplazar los valores en Person.Contact de la base de datos de Adventureworks con algunos valores nuevos. La siguiente declaración de caso de consulta está funcionando bien para otros valores, pero no puedo cambiar los valores que están en NULL. Estoy usando SQL Server. Cualquier ayuda es apreciada.cómo capturar valores NULL usando la declaración de caso

 
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 

Respuesta

10

que haría uso de la función ISNULL - se devolverá el valor dado si el campo es 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

Wrong on NULL case. –

+0

@Johan: mi culpa - se arregló. Ahora debería funcionar bien. –

+6

Estoy de acuerdo. Esperemos que nadie tenga 'NULLVALUE' como segundo nombre. –

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

este momento para publicar 7 años más tarde, pero he estado tratando para encontrar una solución para Interbase/Firebird y esta publicación sigue apareciendo. Ninguna de las soluciones aquí funciona porque no hay ISNULL, así que pensé que ayudaría a cualquier otra persona que venga a buscarla:

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 no tiene ['is null'] (http://stackoverflow.com/a/2085129/11683) también (en lugar de' isnull')? – GSerg

+1

Muchas gracias .. Tuve el mismo problema con el uso de Interbase que no tiene ISNULL pero tu código funcionó. – SovereignSun

+0

@GSerg Firebird podría, pero yo estaba trabajando en InterBase ... Firebird parece tener más funciones, pero cualquier cosa que funcione en InterBase debería funcionar en Firebird, pero no al revés. Además, vi todo tipo de enlaces para configurar tu propia UDF para ISNULL, pero eso parecía un poco más allá de lo que tenía que hacer. – eromrab

Cuestiones relacionadas