2011-07-01 10 views
8

Tengo esta declaración de selección en la que verifico si el número de teléfono está vacío o nulo y, si lo están, entonces devolvería 'No hay número de teléfono disponible'. Al igual que estevalor de retorno 2008 del servidor SQL sql acortado al usar ISNULL y NULLIF

SELECT 
     Name, 
     ISNULL(NULLIF(Phone, ''), 'No Phone Number is available') AS Phone 
FROM Person 

Sin embargo, cuando el número de teléfono es nulo o vacío que no estoy recibiendo el texto completo 'No hay un número de teléfono esté disponible'. Solo los primeros 20 caracteres están siendo devueltos. La longitud del campo Teléfono también es 20. Por lo tanto, creo que esto devuelve texto dependiendo de la longitud del campo del teléfono.

¿Hay alguna manera de corregir esto sin cambiar la longitud del campo?

+0

Si publica ejemplos de código, XML o de datos, por favor ** ** destacar aquellas líneas en el editor de texto y haga clic en el botón "muestras de código" ('{ } ') en la barra de herramientas del editor para formatear y sintaxis y ¡resaltarlo! –

Respuesta

9

Estás en la correcta.

ISNULL utiliza el tipo de datos y la longitud del primer parámetro. COALESCE toma el de "mayor prioridad". Por lo tanto:

COALESCE(NULLIF(Phone, ''), 'No Phone Number is available') AS Phone 

O

ISNULL(NULLIF(CAST(Phone as varchar(30)), ''), 'No Phone Number is available') AS Phone 
Cuestiones relacionadas