2017-09-21 4 views
1

私はここでは、コードSQLは文字列の末尾にあるスペースを無視するのはなぜですか?

DECLARE @A VARCHAR(10) = 'A' 
DECLARE @B VARCHAR(10) = 'A ' 

IF(@[email protected]) 
    SELECT 'Equal' 
ELSE 
    SELECT 'Not Equal' 

@A @Bとを持っては等しくありません。末尾に余分なスペースを無視しないように

、私は

IF(REPLACE(@B,' ','.') = REPLACE(@A,' ','.')) 

を試してみましたが、私の質問は以下のとおりです。

  1. なぜ同等として扱うSQL - ?
  2. これを行う他の方法はありますか?
+0

str_replace(」」、 ''、B @)を参照してくださいuがやろうとしていたものということですか? –

+0

投稿の謝辞:https://support.microsoft.com/en-gb/help/316626/inf-how-sql-server-compares-strings-with-trailing-spaces – Tanner

+0

翼の中に何かが潜んでいます。 ['Len()'](https://docs.microsoft.com/en-us/sql/t-sql/functions/len-transact-sql)のドキュメントから: "指定された文字数を返します文字列式**後続の空白を除く**。 " – HABO

答えて

3

@Aおよび@は、と等しい。それらは単に同じではありません:)文字列の比較を実行すると、SQL Serverは後続のスペースを持つ文字列のすべてのバリアントを等しいと見なします。さらに、アクティブな照合では、追加の文字列をまとめて等価クラスにまとめることができます。

末尾のスペースを区別する方法で2つの文字列を比較する場合は、like演算子を使用します。例えば

select 1 
where 'a' like 'a ' 

INF: How SQL Server Compares Strings with Trailing Spaces

関連する問題