回答:
すべてがANSI規格に準拠しています。
SQL Serverは、文字列とスペースを比較する方法について、ANSI / ISO SQL-92仕様(セクション8.2、、一般規則#3)に従います。ANSI規格では、比較で使用される文字列の長さが一致するように、それらを比較する前にパディングが必要です。パディングは、WHEREおよびHAVING句の述語のセマンティクスと他のTransact-SQL文字列比較に直接影響します。たとえば、Transact-SQLは、文字列 'abc'と 'abc'をほとんどの比較演算で同等と見なします。
このルールの唯一の例外は、LIKE述部です。LIKE述語式の右側に後続スペースのある値が含まれている場合、SQL Serverは比較が行われる前に2つの値を同じ長さに埋め込みません。LIKE述語の目的は、定義により、単純な文字列の等価性テストではなくパターン検索を容易にすることであるため、これは前述のANSI SQL-92仕様のセクションに違反しません。
上記のすべてのケースのよく知られた例を次に示します。
DECLARE @a VARCHAR(10)
DECLARE @b varchar(10)
SET @a = '1'
SET @b = '1 ' --with trailing blank
SELECT 1
WHERE
@a = @b
AND @a NOT LIKE @b
AND @b LIKE @a
末尾の空白とLIKE
句の詳細を次に示します。
しかし、あなたがそれらを異なるしたい場合-あなたは使用することを決めることができるDATALENGTH
代わりの機能をLEN
するので、
SELECT 1 WHERE LEN('John ') = LEN('John')
代わりに1を置きます
SELECT 1 WHERE DATALENGTH('John ') = DATALENGTH('John')
解決策は