SQLServerのWHERE句は大文字小文字でもヒットしてしまう問題

エキサイトしばたにえんです。 早速ですが、

WITH hogefuga_table AS (
    SELECT 'hogefuga' AS word
)
SELECT * FROM hogefuga_table 
WHERE word = 'HOGEFUGA';

こちらhogefugaがヒットされてしまいます。 WHERE句の大文字小文字を判別してくれません。

SQLServerのWHERE句で大文字小文字を判別するためにcollateが使えます。

WITH hogefuga_table AS (
    SELECT 'hogefuga' AS word
)
SELECT * FROM hogefuga_table 
WHERE word = 'HOGEFUGA' COLLATE Japanese_CS_AS_KS_WS;

とすればWHERE句の大文字小文字を判別してくれるようになり、ヒットされることはありません。

COLLATEには他にも種類があります。 例えば、「ぽ」、「ぼ」、「ボ」、「ポ」の判別を「したくない」場合

WITH hogefuga_table AS (
    SELECT 'ボボぼーボボーボぽ' AS word
)
SELECT * FROM hogefuga_table 
WHERE word = 'ぽぼポーぽぽーぽボ' COLLATE Japanese_CI_AI;

とするとボボぼーボボーボぽヒットしてくれるようになります。 他にもCOLLATEには種類があるので必要に応じて使い分けるといいかもしれません。