콘텐츠로 건너뛰기
리뷰나라
  • JAVASCRIPT
  • JAVA
  • PYTHON
  • C#
  • Android
  • Html

[sql] LIKE 연산자는 MSSQL Server에서 대소 문자를 구분합니까?

Program / 글쓴이 어드민

에서 에서 LIKE 연산자에 대한 설명서 , 아무것도 그것의 대소 문자 구분에 대해 이야기하지 않습니다. 맞나요? 활성화 / 비활성화하는 방법은 무엇입니까?

varchar(n)중요한 경우 Microsoft SQL Server 2005 설치에서 열을 쿼리하고 있습니다.



답변

대소 문자를 구분하는 연산자가 아니라 열 자체입니다.

SQL Server 설치가 수행되면 인스턴스에 대한 기본 데이터 정렬이 선택됩니다. 달리 명시 적으로 언급하지 않는 한 (아래 collate 절 확인) 새 데이터베이스가 생성되면 인스턴스에서 데이터 정렬을 상속하고 새 열이 생성 될 때 자신이 속한 데이터베이스에서 데이터 정렬을 상속합니다.

같은 데이터 정렬 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


답변

데이터 정렬에 대한이 모든 이야기는 다소 복잡해 보입니다. 다음과 같은 것을 사용하지 않는 이유는 무엇입니까?

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

그런 다음 검사는 데이터 정렬에 관계없이 대소 문자를 구분하지 않습니다.


답변

테이블을 정의 할 때 데이터 정렬 순서 를 정의 할 수있는 옵션이 있습니다. 대소 문자를 구분하는 순서를 정의하면 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..


답변

열 / 데이터베이스 / 서버의 데이터 정렬을 변경하지 않고 대 / 소문자 구분 검색을 수행하려면 항상 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;


답변

like오퍼레이터는 두 문자열 걸린다. 이러한 문자열에는 호환 가능한 데이터 정렬이 있어야하며 여기 에 설명되어 있습니다 .

제 생각에는 상황이 복잡해집니다. 다음 쿼리는 데이터 정렬이 호환되지 않는다는 오류를 반환합니다.

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”값은 대소 문자를 구분하는 세계에서 일치하지 않습니다.

즉, 데이터 정렬이없는 것과 기본 데이터 정렬을 사용하는 것에는 차이가 있습니다. 한쪽에 데이터 정렬이 없으면 다른 쪽의 명시 적 데이터 정렬이 “할당”됩니다.

(명시 적 데이터 정렬이 왼쪽에있을 때 결과는 동일합니다.)


답변

실행 해보세요.

SELECT SERVERPROPERTY('COLLATION')

그런 다음 데이터 정렬이 대소 문자를 구분하는지 확인하십시오.


답변

모든 항목의 속성에서 변경할 수 있습니다.

대소 문자 구분




글 탐색

← 이전 글
다음 글 →

최신 글

  • [java] .pem 파일을 읽고 개인 및 공개 키를 얻는 방법
  • [javascript] 페이지의 모든 AJAX 요청에 “후크”추가
  • [android] ListView가 접히지 않고 어떻게 ScrollView에 넣을 수 있습니까?
  • [linux] Apache 서버의 루트 디렉토리를 어떻게 변경합니까? [닫은]
  • [ios] Swift에서 Int를 Hex String으로 변환하는 방법
  • [python] 등급 시스템 기능에서 반복적 인 if-elif 문을 어떻게 단순화 할 수 있습니까?
  • [c#] C #에서 스택 오버플로 예외 포착
  • [windows] Windows의 /usr/local/ssl/openssl.cnf에서 구성 정보를로드 할 수 없습니다
  • [twitter-bootstrap] Bootstrap을 사용하여 모바일에 테이블을 표시하는 방법은 무엇입니까?
  • [windows] BATCH 스크립트에서 무작위로 사용하는 방법은 무엇입니까?

카테고리

태그

.net android angular angularjs arrays asp.net asp.net-mvc bash c c# css database django docker html ios iphone java javascript jquery json linux macos mysql node.js objective-c pandas php postgresql python r reactjs regex ruby ruby-on-rails shell sql sql-server string swift typescript unix visual-studio windows xcode
Copyright © daplus.net - Powered by Naya