2009-08-03 4 views

답변

103

SQL Server 데이터베이스의 기본 구성에서 문자열 비교 은 (는)이며 대/소문자를 구분하지 않습니다. 데이터베이스가 대체 데이터 정렬을 사용하여이 설정을 무시하면 쿼리에 사용할 데이터 정렬의 종류를 지정해야합니다.

SELECT * FROM myTable WHERE myField = 'sOmeVal' COLLATE SQL_Latin1_General_CP1_CI_AS 

필자가 제공 한 데이터 정렬은 단지 예일뿐입니다. SQL Server 데이터 정렬에 대한 자세한 내용은 here을 참조하십시오.

2

을 무시하고 다시오고 싶어? MS SQL Server를 사용하면 데이터베이스 전체의 설정이거나 COLLATE 키워드를 사용하여 쿼리 당 오버라이드 할 수 있습니다.

25

일반적으로 문자열 비교는 대소 문자를 구분하지 않습니다.

SELECT * FROM myTable 
WHERE convert(varbinary, myField) = convert(varbinary, 'sOmeVal') 
+3

누군가 나보다 빠릅니다 .-) –

+4

+1 나는 당신의 간단한 (그리고 스크롤바가없는) 대답을 더 좋아했습니다. –

4

당신은 민감한 경우 강제 할 수 있습니다 : 데이터베이스가 구분 데이터 정렬을 구분하도록 구성되어있는 경우, 당신은 대소 문자를 구분 하나를 사용하여 강제로 필요 다른 해결책을 다른 곳에서 찾았습니다. 즉, 사용하려면

upper(@yourString) 

그러나 여기있는 모든 사람들은 SQL Server에서 대소 문자를 무시하기 때문에 중요하지 않습니다. 나는 우리 데이터베이스가 대소 문자를 구분한다고 확신한다.

+2

이것이 기능적이지만 바람직한 방법은 아닙니다. 데이터 정렬은 정렬 및 문자열 비교를 관리하는 데 사용됩니다. –

+0

@AdamRobinson은 "문자열 비교"에 관한 것이 아닙니다. – Fandango68

19

I : 그런 VARBINARY에 캐스팅,

SELECT balance FROM people WHERE email = '[email protected]' 
    COLLATE SQL_Latin1_General_CP1_CI_AS 
+4

데이터베이스가 대소 문자를 구분할 수 있다는 것이 맞지만, 필요한 경우에도 매우 비효율적입니다. COLLATE는 사용할 키워드입니다. – mjaggard

+1

@mjaggard를 가져 주셔서 감사합니다. 나는 당신이나 나의 대답을 혼란스럽게하는 것처럼 보이는 누군가가 나의 것과 같은 대답을 찾고 찾아내는 나 자신과 같은 사람의 유익을 위해 정교하기를 희망한다. – Danny

+1

완벽하게 합리적인 설명이기 때문에 이것을 Upvoted. 너무 많은 오버 헤드가 발생합니다. 문자열에 문자열이 포함되어있어 데이터 정렬이 이해되지 않으면 어떻게됩니까? 라틴어 1은 형편없는 인코딩 체계입니다.문자열에 아포스트로피가 있으면 의미있는 결과를 얻으십시오 (Like : O'Brien). – eggmatters

5

아니요, LIKE 만 사용하면 작동하지 않습니다. LIKE은 지정한 패턴과 정확히 일치하는 값을 검색합니다. 이 경우 LIKE은 'someval'이 아닌 'sOmeVal'텍스트 만 찾습니다.

실용적인 솔루션은 LCASE() 기능을 사용하고 있습니다. LCASE('sOmeVal')은 텍스트의 소문자 문자열 'someval'을 가져옵니다. 당신이 당신의 비교의 양쪽이 기능을 사용하는 경우, 그것은 작동합니다 : 당신의 'sOmeVal' 'someval'(예를 들어 'Someval의 모든 다른 표기법을 일치하도록

SELECT * FROM myTable WHERE LCASE(myField) LIKE LCASE('sOmeVal')

문은 두 개의 소문자 문자열을 비교 ','sOMEVA1 '등).

+6

SQL Server 설치 중 99.9 %가 _CI로 조합되어 있으므로 LIKE는 대소 문자를 구분하지 않습니다. – RichardTheKiwi

관련 문제