Выберите столбец, если пусто, выберите из другого - PullRequest
32 голосов
/ 17 ноября 2009

Как определить, является ли поле пустым (не нулевым), а затем выбрать другое поле, если оно есть?

Что мне действительно нужно, так это функция IsBlank, которая работает так же, как IsNull, но с пробелами.

REPLACE не работает с пробелами, COALESCE работает только с NULLS.

Ответы [ 4 ]

86 голосов
/ 17 ноября 2009

Как насчет объединения COALESCE и NULLIF.

SELECT COALESCE(NULLIF(SomeColumn,''), ReplacementColumn)
FROM SomeTable
16 голосов
/ 17 ноября 2009

Вы можете использовать оператор CASE для этого

select 
Case WHEN Column1 = '' OR Column1 IS NULL OR LEN (TRIM (Column1))  = 0 
     THEN Column2 
     ELSE Column1 END as ColumnName
from TableName
4 голосов
/ 17 ноября 2009

РЕДАКТИРОВАТЬ: Вы не можете использовать IF() в MSSQL.

Используйте оператор IF в части SELECT вашего SQL:

SELECT IF(field1 != '', field1, field2) AS myfield FROM ...
2 голосов
/ 17 ноября 2009

Вы всегда можете написать функцию isBlank (), например,

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
...