[SQL] 어떻게 WHERE 절 (I SQL Server를 사용하고 있습니다)에서 대소 문자 구분 검색을 할까?
SQL어떻게 WHERE 절 (I SQL Server를 사용하고 있습니다)에서 대소 문자 구분 검색을 할까?
내 SQL 쿼리의 대소 문자 구분 검색을 수행 할 수 있습니다. 그러나 기본적으로 SQL Server는 문자열의 경우를 고려하지 않습니다.
SQL 쿼리의 대소 문자 구분 검색을 수행하는 방법에 대한 어떤 생각?
해결법
-
==============================
1.데이터 정렬을 변경을 통해 수행 할 수 있습니다. 기본적으로 사례를 구분하지 않습니다.
데이터 정렬을 변경을 통해 수행 할 수 있습니다. 기본적으로 사례를 구분하지 않습니다.
링크에서 발췌 :
SELECT 1 FROM dbo.Customers WHERE CustID = @CustID COLLATE SQL_Latin1_General_CP1_CS_AS AND CustPassword = @CustPassword COLLATE SQL_Latin1_General_CP1_CS_AS
또는 대소 문자로 열을 변경합니다.
-
==============================
2.데이터 정렬을 사용하거나 다음과 같이 바이너리로 변환하여 :
데이터 정렬을 사용하거나 다음과 같이 바이너리로 변환하여 :
SELECT * FROM Users WHERE Username = @Username COLLATE SQL_Latin1_General_CP1_CS_AS AND Password = @Password COLLATE SQL_Latin1_General_CP1_CS_AS AND Username = @Username AND Password = @Password
사용자 이름 / 암호의 복제 엔진을 인덱스를 사용할 수있는 가능성을 제공하기 위해 존재한다. 데이터 정렬은 위의 소문자 구분 데이터 정렬, 필요한 경우 당신이 필요로하는 일에 변화이다.
두 번째는, 바이너리 캐스팅, 다음과 같이 할 수있다 :
SELECT * FROM Users WHERE CAST(Username as varbinary(100)) = CAST(@Username as varbinary)) AND CAST(Password as varbinary(100)) = CAST(@Password as varbinary(100)) AND Username = @Username AND Password = @Password
-
==============================
3.당신은 VARBINARY로 변환을 사용하여 쿼리를 만들 수 있습니다 - 그것은 매우 간단합니다. 예:
당신은 VARBINARY로 변환을 사용하여 쿼리를 만들 수 있습니다 - 그것은 매우 간단합니다. 예:
Select * from your_table where convert(varbinary, your_column) = convert(varbinary, 'aBcD')
-
==============================
4.사용 BINARY_CHECKSUM
사용 BINARY_CHECKSUM
SELECT FROM Users WHERE BINARY_CHECKSUM(Username) = BINARY_CHECKSUM(@Username) AND BINARY_CHECKSUM(Password) = BINARY_CHECKSUM(@Password)
-
==============================
5.사용 HASHBYTES
사용 HASHBYTES
declare @first_value nvarchar(1) = 'a' declare @second_value navarchar(1) = 'A' if HASHBYTES('SHA1',@first_value) = HASHBYTES('SHA1',@second_value) begin print 'equal' end else begin print 'not equal' end -- output: -- not equal
...에서 where 절
declare @example table (ValueA nvarchar(1), ValueB nvarchar(1)) insert into @example (ValueA, ValueB) values ('a', 'A'), ('a', 'a'), ('a', 'b') select ValueA + ' = ' + ValueB from @example where hashbytes('SHA1', ValueA) = hashbytes('SHA1', ValueB) -- output: -- a = a select ValueA + ' <> ' + ValueB from @example where hashbytes('SHA1', ValueA) <> hashbytes('SHA1', ValueB) -- output: -- a <> A -- a <> b
또는 값을 찾을 수 있습니다
declare @value_b nvarchar(1) = 'A' select ValueB + ' = ' + @value_b from @example where hashbytes('SHA1', ValueB) = hasbytes('SHA1', @value_b) -- output: -- A = A
-
==============================
6.당신의 SQL DB에 데이터 정렬로 Latin1_General_CS를 사용
당신의 SQL DB에 데이터 정렬로 Latin1_General_CS를 사용
-
==============================
7.MySQL의에서 당신은 정렬을 변경하려면 다음 그냥이 같은 바이너리 키워드를 사용하는 경우를 구분 검색을 수행하지 않으려면 :
MySQL의에서 당신은 정렬을 변경하려면 다음 그냥이 같은 바이너리 키워드를 사용하는 경우를 구분 검색을 수행하지 않으려면 :
SELECT * FROM table_name WHERE binary username=@search_parameter and binary password=@search_parameter
-
==============================
8.
select * from incidentsnew1 where BINARY_CHECKSUM(CloseBy) = BINARY_CHECKSUM(Upper(CloseBy))
-
==============================
9.다른 사람이 말한대로, 당신은 대소 문자를 구분 검색을 수행 할 수 있습니다. 아니면 그냥 날로서 지정된 열의 정렬 형식을 변경합니다. 사용자에 대한 / 내 데이터베이스에 암호 열이 나는 다음과 같은 명령을 통해 조합으로 변경 :
다른 사람이 말한대로, 당신은 대소 문자를 구분 검색을 수행 할 수 있습니다. 아니면 그냥 날로서 지정된 열의 정렬 형식을 변경합니다. 사용자에 대한 / 내 데이터베이스에 암호 열이 나는 다음과 같은 명령을 통해 조합으로 변경 :
ALTER TABLE `UserAuthentication` CHANGE `Password` `Password` VARCHAR(255) CHARACTER SET latin1 COLLATE latin1_general_cs NOT NULL;
from https://stackoverflow.com/questions/1831105/how-to-do-a-case-sensitive-search-in-where-clause-im-using-sql-server by cc-by-sa and MIT license
'SQL' 카테고리의 다른 글
[SQL] 어떻게 아약스를 통해 여러 데이터 필드를 보내? [닫은] (0) | 2020.03.24 |
---|---|
[SQL] SQL 데이터베이스의 기본 키와 같은 문자열 (0) | 2020.03.24 |
[SQL] SQL 서버 삽입하지가 존재하는 경우 (0) | 2020.03.24 |
[SQL] MySQL을 사용 임의 & 유일한 8 문자열을 생성 (0) | 2020.03.24 |
[SQL] 인덱스의 열 순서는 얼마나 중요합니까? (0) | 2020.03.24 |