116

LIKE演算子に関するドキュメントでは、大文字と小文字の区別については何も説明されていません。それは...ですか?それを有効/無効にする方法は?

varchar(n)重要な場合は、Microsoft SQLServer2005のインストールで列をクエリしています。

4

8 に答える 8

124

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

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

のような照合sql_latin1_general_cp1_ci_asは、列の内容をどのように処理するかを指示します。CIは大文字と小文字を区別せず、ASはアクセントを区別することを表します。

照合の完全なリストは、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
于 2013-02-19T16:40:48.980 に答える
21

照合についてのこの話はすべて、少し複雑すぎるようです。次のようなものを使用しないのはなぜですか。

IF UPPER(@@VERSION) NOT LIKE '%AZURE%'

次に、照合で大文字と小文字が区別されません。

于 2013-07-18T14:32:56.297 に答える
15

COLLATE列/データベース/サーバーの照合を変更せずに大文字と小文字を区別する検索を実行する場合は、いつでも句を使用できます。

USE tempdb;
GO
CREATE TABLE dbo.foo(bar VARCHAR(32) COLLATE Latin1_General_CS_AS);
GO
INSERT dbo.foo VALUES('John'),('john');
GO
SELECT bar FROM dbo.foo 
  WHERE bar LIKE 'j%';
-- 1 row

SELECT bar FROM dbo.foo 
  WHERE bar COLLATE Latin1_General_CI_AS LIKE 'j%';
-- 2 rows

GO    
DROP TABLE dbo.foo;

列/データベース/サーバーで大文字と小文字が区別され、大文字と小文字を区別する検索が必要ない場合は、逆の方法でも機能します。

USE tempdb;
GO
CREATE TABLE dbo.foo(bar VARCHAR(32) COLLATE Latin1_General_CI_AS);
GO
INSERT dbo.foo VALUES('John'),('john');
GO
SELECT bar FROM dbo.foo 
  WHERE bar LIKE 'j%';
-- 2 rows

SELECT bar FROM dbo.foo 
  WHERE bar COLLATE Latin1_General_CS_AS LIKE 'j%';
-- 1 row

GO
DROP TABLE dbo.foo;
于 2013-02-19T16:52:30.303 に答える
14

テーブルの定義時に照合順序を定義するオプションがあります。大文字と小文字を区別する順序を定義すると、LIKE演算子は大文字と小文字を区別して動作します。大文字と小文字を区別しない照合順序を定義すると、LIKE演算子は大文字と小文字も無視します。

CREATE TABLE Test (
    CI_Str VARCHAR(15) COLLATE Latin1_General_CI_AS -- Case-insensitive
,   CS_Str VARCHAR(15) COLLATE Latin1_General_CS_AS -- Case-sensitive
);

これはsqlfiddleの簡単なデモで、を使用した検索での照合順序の結果を示していますLIKE

于 2013-02-19T16:30:44.363 に答える
8

like演算子は2つの文字列を取ります。これらの文字列には互換性のある照合が必要です。これについては、ここで説明します。

私の意見では、物事は複雑になります。次のクエリは、照合に互換性がないことを示すエラーを返します。

select *
from INFORMATION_SCHEMA.TABLES
where 'abc' COLLATE SQL_Latin1_General_CP1_CI_AS like 'ABC' COLLATE SQL_Latin1_General_CP1_CS_AS

ここのランダムマシンでは、デフォルトの照合はSQL_Latin1_General_CP1_CI_ASです。次のクエリは成功しますが、行を返しません。

select *
from INFORMATION_SCHEMA.TABLES
where 'abc' like 'ABC' COLLATE SQL_Latin1_General_CP1_CS_AS

ケースセンシティブな世界では、値「abc」と「ABC」は一致しません。

つまり、照合を行わない場合とデフォルトの照合を使用する場合には違いがあります。一方の側に照合がない場合、もう一方の側から明示的な照合が「割り当て」られます。

(明示的な照合が左側にある場合、結果は同じです。)

于 2013-02-19T16:56:39.827 に答える
4

実行してみてください、

SELECT SERVERPROPERTY('COLLATION')

次に、照合で大文字と小文字が区別されるかどうかを確認します。

于 2013-02-19T16:29:56.483 に答える
1

すべてのアイテムのプロパティから変更できます。

大文字と小文字を区別

于 2018-09-06T01:31:34.830 に答える
0

Microsoft SQL ServerManagementStudioで照合を簡単に変更できます。

  • 表を右クリック->デザイン。
  • 列を選択し、i列のプロパティを[照合]まで下にスクロールします。
  • 「大文字と小文字を区別する」にチェックを入れて、並べ替えの設定を行います
于 2018-04-13T08:23:54.783 に答える