ITエンジニアの成長ブログ

ITエンジニアとして行う勉強の発信&日々の生活で体験した楽しいことをゆるく発信

SQL Serverの末尾スペースありの文字列の比較について

今回は、タイトルの通りSQL Serverにおける末尾スペースありの文字列の比較についてまとめたいと思います。

SQL Serverでは、標準では以下の文字の比較は同一として判定されます。文字列の比較の際には、末尾のスペースは無視されます。

'AAA' = 'AAA     '


実際に以下のクエリで確認してみます。公式の例を引用しました。

CREATE TABLE #tmp (c1 VARCHAR(10));
GO

INSERT INTO #tmp VALUES ('abc ');

INSERT INTO #tmp VALUES ('abc');
GO

SELECT DATALENGTH(c1) AS 'EqualWithSpace', * FROM #tmp
WHERE c1 = 'abc ';

SELECT DATALENGTH(c1) AS 'EqualNoSpace  ', * FROM #tmp
WHERE c1 = 'abc';


末尾スペースありとなしの2つのレコードを登録してから、抽出条件も同様に末尾スペースありとなしの2パターンで検索しています。

末尾スペースありの文字列の比較

結果は、どちらのクエリも末尾スペースありとなしの2つのレコードを抽出することができていますね。このように、SQL Serverでは末尾スペースのある文字列を比較するときには注意する必要があります。

因みに、上記の末尾スペースについては半角で検証していますが、日本語環境のデフォルトの照合順序の「Japanese_CI_AS」であれば、全角のスペースでも同様の挙動となります。

仮に照合順序を「Japanese_CI_AS_WS」として半角と全角を区別する場合は、末尾スペースありとなしは区別されるようでした。つまり、末尾スペースありとなしを比較するときに同一文字として認識されません。照合順序を変更している場合はこちらも注意が必要そうです。

今回は簡単ですが、この辺で。最後までお読みいただきありがとうございました。