2011-02-10 6 views
8

SELECTステートメントで、選択しているテーブルの値を使用する連結文字列を選択している場合は、NULLを処理する最適な方法は何ですかそれらの値のために私はまだ私の文字列を持っている?私は、ユーザーのために市、州、および国の選択だ、と私はそれらすべてを連結3番目のフィールドをしたい場合のように、:T-SQL:文字列連結でNULL値を処理する最も良い方法

SELECT City, State, Country, 
City + ', ' + State + ', ' + Country AS 'Location' 
FROM Users 

しかし三つのフィールドのいずれかがある場合は、「場所」はNULLですNULL(ユーザーが米国出身でない場合はいつでも発生します)。

SELECT City, State, Country, 
City + ', ' + COALESCE(State + ', ', '') + Country AS 'Location' 
FROM Users 

しかし、これは単なるハックだった場合、私はわからなかったし、それを行うにはもっと良い方法があるかどう:

私の現在のソリューションはこれです。思考?

+2

'coalesce'はこのための標準的な方法です。あなたの場合は 'isnull'だけ必要です。可能な複製[SQL Server String Concatenation with Null](http://stackoverflow.com/questions/2916791/sql-server-string-concatenation-with-null)btw – bzlm

+0

@bzlmおっと!あなたが正しい。私が検索したりタイトルを入力したときになぜそれが上がらなかったのか分かりません。おそらく、私は特に "t-sql"を置くからです。投票を終了する。あなた自身の質問を閉じるために投票するのはちょっと変です。それはくすぐります。 – JoeCool

+0

@bzlm「重複した」質問に対する答えは私には魅力がありません。列間の区切り文字は扱いません。 – RichardTheKiwi

答えて

13

、あなたは

;with users(City, State, Country) as (
select 'a', null, 'c' union all 
select 'a', 'b', 'c' union all 
select null, null, 'c') 

-- ignore above this line 
SELECT City, State, Country, 
    STUFF(
     ISNULL(', ' + City, '')+ 
     ISNULL(', ' + State, '')+ 
     ISNULL(', ' + Country, ''), 1, 2, '') AS 'Location' 
FROM Users 

出力

City State Country Location 
---- ----- ------- -------- 
a NULL c  a, c 
a b  c  a, b, c 
NULL NULL c  c 
+0

+1;中間値がnullになる可能性は考慮されていませんでしたが、それは後見では明らかです。 –

+0

@Adam神は20/20の事を祝福します! – RichardTheKiwi

+0

私はちょっと混乱しています - クエリが機能するために必要な上記の「無視」以上のものはありますか? – JoeCool

2

はい、それは行く方法です。 isnull()を使用することもできますが、合体はより標準的です。あなたは都市や国でもnullがあるかもしれないと考えるかもしれません。また、複数の住所があり、都市、州、国が複数ある可能性があり、関連する表がこの情報に適していると考えるかもしれません。予想通り、すべての2つのフィールド間のカンマで正しい見えるように

+1

もっと標準ですか?引用が必要です。 – bzlm

+1

@bzlm:「普及率の点ではもっと標準的だ」と言っていないが、「ISNULL」がカバーしているすべてのケースをカバーしていることを考えると、 (例えば、複数の 'ISNULL'ステートメントを必要とする追加のオプションを連鎖させる)ことができます。さらに、 'COALESCE'はSqlCEで利用可能ですが、' ISNULL'は利用できません。 –

+2

@Adam、@Bzlm私たちがSQLCEを扱っているのでなければ、それをドラッグアウトしないでください。 Btw、COALESCEには、IsNullと比較した場合、いくつかの動的な型指定とパフォーマンスの問題があります.SQL Server(非CE)上にあり、2つの値しか必要ない場合は、不要にCOALESCEにアクセスしないでください。 – RichardTheKiwi

3

あなたは、SQL 2012年にconcat関数を使用することができ、このフォームを使用することができ、後で

SELECT City, State, Country, 
Concat(City, ', ', State, ', ', Country) AS 'Location' 
FROM Users 
関連する問題