0

フィールドにアドレス1を表示し、アドレス2を「アドレス1、アドレス2」として表示するSQLクエリがあります。私のクエリは

(S.Address1 + '  ,  ' + S.Address2)as Address1 

しかし、Address2 の値が空白の場合、「address1」が表示され、address1 のみを表示する必要があります。カンマを削除するにはどうすればよいですか

4

4 に答える 4

5

使用するCOALESCE

(COALESCE(S.Address1,'') + '  ,  ' + COALESCE(S.Address2, '')) as Address1 

ただし、上記のステートメントの問題は、がnull,の場合に末尾があり、修正することですaddress2

(COALESCE(S.Address1,'')  + COALESCE(' , ' + S.Address2, '')) as Address1

更新 1

CASE WHEN S.Address2 = '' 
     THEN S.Address1
     ELSE S.Address1 + '  ,  ' + S.Address2
END  AS Addrss
于 2013-04-04T13:54:25.203 に答える
3

JWは近いと思いますが、実際に必要な式は次のとおりです。

S.Address1 + COALESCE('  ,  ' + NULLIF(S.Address2,''),'') as Address1

(以下は関係ありません。OP は列の値が空白であると述べているため、 ではありませんNULL)

CONCAT_NULL_YIELDS_NULLしかし、別の問題もあります。明らかに に設定し ているため、上記は (まだ) 機能しませんOFF次の理由から、これをオンにする必要があります (通常は に設定ANSI_NULLSしますON) 。

SQL Server の将来のバージョンでは、このオプションCONCAT_NULL_YIELDS_NULLは常にONオフになり、オプションを明示的にオフに設定するアプリケーションはすべてエラーを生成します。新しい開発作業でこの機能を使用することは避け、現在この機能を使用しているアプリケーションを変更することを計画してください。

于 2013-04-04T13:58:09.330 に答える
1

address2 が null または空の文字列、または単に空白のいずれかである場合、次のようなものが必要です。

select address1 + 
case when length(trim(ifnull(address2, ''))) > 0 then ', ' + address2
else '' end
于 2013-04-04T14:02:41.917 に答える