2009-11-17 13 views
24

フィールドが空白(nullでない)かどうかを検出し、それ以外のフィールドを選択するにはどうすればよいですか?空欄の場合は空欄を選択

本当に必要なのは、IsNullと同じように動作するIsBlank関数ですが、空白があります。

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

EDIT:mssqlでIF()を使用することはできません。

あなたのSQLのSELECT部分​​にIF文を使用します。

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

ニースが、私は2つ以上の列を動作させる必要がある場合、痛みになります。 –

+0

「IF IF(Address2!= ''、Address2、Address3)AS Address FROM Sites'はキーワード 'IF'の近くで誤った構文を与えます。 –

+1

さて、私は愚か者で、mysqlと混乱しています。 'IF()'はmysqlだけで動作するようですので、上記のように 'CASE WHEN THEN ELSE END'を使用してください。私はここにこれを他人に警告として残します:) – MDCore

13

あなたはいつも、のようなものをISBLANK()関数を書くことができ、この

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

これは私が自分で持っていたものですが、非常にうんざりです。 –

2

ためCASEステートメントを使用することができます

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

COALESCEはRaj Moreのようなcase文を使っているので、* N *個の式をサポートできると思います。 –