1. ホーム
  2. sql

[解決済み] SQL ServerでLIKE演算子の大文字と小文字は区別されますか?

2022-05-16 15:09:57

質問

この質問では のドキュメントで、LIKE 演算子について に関するドキュメントでは、大文字と小文字の区別について何も語られていません。そうなのでしょうか?どのようにそれを有効/無効にするのですか?

私はクエリ varchar(n) 列を、Microsoft SQL Server 2005 のインストール上でクエリしています。

どのように解決するのですか?

大文字小文字を区別するのは演算子ではなく、列そのものです。

SQL Server のインストールが実行されるとき、デフォルトの照合順序がインスタンスに選択されます。明示的に言及されていない限り (下記の照合順序を確認してください)、新しいデータベースが作成されると、インスタンスから照合順序を継承し、新しい列が作成されると、それが属するデータベースから照合順序を継承します。

のような照合順序は sql_latin1_general_cp1_ci_as のような照合順序は、カラムの内容がどのように扱われるべきかを決めます。CIはcase insensitive、ASはaccent sensitiveを意味します。

照合順序の完全な一覧は https://msdn.microsoft.com/en-us/library/ms144250(v=sql.105).aspx。

(a) インスタンスの照合順序をチェックする

select serverproperty('collation')

(b) データベースの照合順序をチェックする

select databasepropertyex('databasename', 'collation') sqlcollation

(c) 異なる照合順序でデータベースを作成する場合

create database exampledatabase
collate sql_latin1_general_cp1_cs_as 

(d) 異なる照合順序でカラムを作成する場合

create table exampletable (
    examplecolumn varchar(10) collate sql_latin1_general_cp1_ci_as null
)

(e) 列照合順序を変更する場合

alter table exampletable
alter column examplecolumn varchar(10) collate sql_latin1_general_cp1_ci_as null

インスタンスとデータベースの照合順序を変更することは可能ですが、以前に作成されたオブジェクトには影響しません。

文字列比較のために列の照合順序をその場で変更することも可能ですが、これは非常にコストがかかるため、実稼働環境では推奨されません。

select
  column1 collate sql_latin1_general_cp1_ci_as as column1
from table1