2009-11-17 63 views
24

如何檢測字段是否爲空(非空),然後選擇另一個字段(如果是)?選擇列,如果空白從另一個選擇

我真正需要的是一個IsBlank函數,其功能與IsNull相同但帶有空格。

REPLACE不能與空白一起使用,COALESCE僅適用於NULLS。

回答

68

如何組合COALESCE和NULLIF。

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

有趣的...可以很容易地擴展到3列工作? –

+2

回答 - 是的,您可以:'COALESCE(NULLIF(Address2,''),NULLIF(Address3,''),Address4)' –

+0

移動答案給你的,因爲它比Case語句更優雅。 –

3

編輯:你不能在mssql中使用IF()

使用IF語句在SQL SELECT部分​​:

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

不錯,但如果我需要工作超過2列將是一個痛苦。 –

+0

我似乎無法得到它的工作:'選擇IF(地址2!='',地址2,地址3)AS地址從站點'給關鍵字'IF'附近的語法不正確。 –

+1

好吧,我是一個完全愚蠢的人,對mysql感到困惑。 'IF()'似乎只適用於mysql,所以應該像上面那樣使用'CASE WHEN ELSE END'。我會在這裏留下這個警告給其他人:) – MDCore

13

您可以使用CASE聲明此

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

這是我自己得到的,但是非常糟糕。 –

2

你總是可以編寫一個的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 
+0

我假設你可以使它支持* N *個表達式,因爲COALESCE通過像Raj More這樣的case語句來完成。 –

相關問題