2009-11-17 17 views

Respuesta

68

Cómo combinar COALESCE y NULLIF.

SELECT COALESCE(NULLIF(SomeColumn,''), ReplacementColumn) 
FROM SomeTable 
+0

Interesante ... ¿se puede extender fácilmente para trabajar con 3 columnas? –

+2

Respuesta: sí puede: 'COALESCE (NULLIF (Address2, ''), NULLIF (Address3, ''), Address4)' –

+0

Moviendo la respuesta a la suya ya que es más elegante que la sentencia Case. –

3

EDITAR: No puede usar IF() en mssql.

utilizar una instrucción IF en la parte SELECT de SQL:

SELECT IF(field1 != '', field1, field2) AS myfield FROM ... 
+0

Agradable, pero si tengo que trabajar más de 2 columnas será un dolor. –

+0

Parece que no puedo hacerlo funcionar: 'SELECT IF (Address2! = '', Address2, Address3) AS Address FROM Sites' da una sintaxis incorrecta cerca de la palabra clave 'IF'. –

+1

Está bien, soy un tonto total y me confundo con mysql. 'IF()' solo parece funcionar con mysql, entonces más bien use 'CASE WHEN THEN ELSE END' como arriba. Dejaré esto aquí como una advertencia a los demás :) – MDCore

13

Usted puede utilizar una instrucción CASE para este

select 
Case WHEN Column1 = '' OR Column1 IS NULL OR LEN (TRIM (Column1)) = 0 
    THEN Column2 
    ELSE Column1 END as ColumnName 
from TableName 
+1

Esto es lo que tenía yo solo, pero es muy desgarbado. –

2

Siempre se puede escribir una función ISBLANK(), algo así como

SET ANSI_NULLS ON 
GO 
SET QUOTED_IDENTIFIER ON 
GO 

CREATE FUNCTION isBlank 
(
    @CheckExpression varchar, @ReplacementExpression varchar 
) 
RETURNS varchar 
AS 
BEGIN 
    IF @CheckExpression IS NOT NULL 
    BEGIN 
     IF @CheckExpression='' or LEN(@CheckExpression) = 0 
     RETURN @ReplacementExpression 
    ELSE 
     RETURN @CheckExpression 
    END 

    RETURN @ReplacementExpression 
END 
GO 
+0

Supongo que podría hacer que sea compatible con la * N * cantidad de expresiones dado que COALESCE lo hace de todos modos a través de una declaración de caso como Raj More. –

Cuestiones relacionadas