SQL 대소 문자 구분 문자열 비교


234

각 문자열의 경우가 동일한 경우에만 비교가 이루어 지도록 문자열을 비교하는 방법은 무엇입니까? 예를 들면 다음과 같습니다.

Select * from a_table where attribute = 'k'

... 'K'속성을 가진 행을 반환합니다. 나는이 행동을 원하지 않는다.


필요한 것은 아니지만 데이터 정렬을 변경하거나 쿼리에서 특정 데이터 정렬을 사용할 수 있습니다.
Kane

7
어떤 SQL 제품입니까?
onedaywhen

답변:


388
Select * from a_table where attribute = 'k' COLLATE Latin1_General_CS_AS 

트릭을 했어.


4
나는 보통 Latin1_General_Bin을 사용합니다
gbn

3
예. 데이터 정렬 자체는 공급 업체별로 다르지만 표준 접근 방식은 대소 문자를 구분하지 않는 데이터 정렬을 사용하는 것입니다. 귀하의 SQL Server 구문입니까?
onedaywhen

필자의 경우 DB에 대소 문자를 구분하는 1 개의 열이 있습니다. 나는 그것을 표준 (CI) 열과 비교해야했습니다. 이 WHERE Foo.Bar = (Baz.Bar COLLATE Latin1_General_CS_AS)의 변형을 사용했습니다
Hypnovirus

2
감사하지만 Latin1_General_CS_AS는 무엇입니까 ?? 특별한 키워드입니까?
Vijay Singh Rana

2
@VijaySinghRana Latin1_General_CS_AS는 데이터 정렬의 사양입니다. 데이터 정렬은 데이터 정렬 및 비교 방법을 결정하는 일련의 규칙을 나타냅니다. 자세한 내용은 이 페이지 를 참조하십시오.
amccormack

51

이 구문을 사용하여 해당 속성을 대소 문자를 구분 하여 변환 할 수도 있습니다 .

ALTER TABLE Table1
ALTER COLUMN Column1 VARCHAR(200)
COLLATE SQL_Latin1_General_CP1_CS_AS

이제 검색은 대소 문자를 구분 합니다.

해당 열을 대소 문자를 구분하지 않게하려면 다음을 사용하십시오.

ALTER TABLE Table1
ALTER COLUMN Column1 VARCHAR(200)
COLLATE SQL_Latin1_General_CP1_CI_AS

29

VARBINARY (Max Length)로 열을 쉽게 변환 할 수 있습니다. 길이는 결함 비교를 피할 것으로 예상되는 최대 값이어야합니다. 길이를 열 길이로 설정하면 충분합니다. 트림 열은 공간이 의미가 있고 테이블 열에서 값을 갖는 것을 제외하고 실제 값을 비교하는 데 도움이됩니다. 이것은 간단한 샘플이며 열 값을 자른 다음 변환 및 비교합니다.

CONVERT(VARBINARY(250),LTRIM(RTRIM(Column1))) = CONVERT(VARBINARY(250),LTRIM(RTRIM(Column2)))

이 도움을 바랍니다.


2
정확히 내가 찾던 것. 대문자를 포함하는 항목을 찾기 위해 한 번의 대소 문자 구분 비교를 수행하는 간단한 방법입니다.
Mike D.

20

다른 대안으로 HASHBYTES를 사용할 수 있습니다.

SELECT * 
FROM a_table 
WHERE HASHBYTES('sha1', attribute) = HASHBYTES('sha1', 'k')

1
충돌은 어떻습니까? 드문 일이지만 동일한 값으로 해시되는 여러 문자열이 있다고 가정합니다.
David Klempfner

네 가능하지만 그런 간단한 문자열 예제에서는 극히 드물었습니다.
Dave Sexton

@DavidKlempfner 왜 먼저 비교를하지 않고 일치하는 경우 해시 바이트를 확인합니까? 이것을 함수로 만들고 StringsAreCaseSensitiveEqual (a, b) => a = b AND HASHBYTES ( 'sha1', a) = HASHBYTES ( 'sha1', b)와 같이 호출 할 수 있습니다.
Demetris Leptos

3

당신은 정의 할 수 있습니다 attributeBINARY사용하거나 INSTR또는 STRCMP검색을 수행 할 수 있습니다.


이 답변은 질문 태그 당 SQL Server에 관한 것이 아닙니다. DBMS에는 이러한 기능 INSTRSTRCMP기능 이 없습니다 .
Jonas
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.