반응형
WHERE 절에서 대소 문자 구분 검색을 수행하는 방법 (SQL Server를 사용 중)?
SQL 쿼리에서 대소 문자를 구분하여 검색하고 싶습니다. 그러나 기본적으로 SQL Server는 문자열의 경우를 고려하지 않습니다.
SQL 쿼리에서 대소 문자 구분 검색을 수행하는 방법에 대한 아이디어가 있습니까?
데이터 정렬 을 변경하여 수행 할 수 있습니다 . 기본적으로 대소 문자를 구분합니다.
링크에서 발췌 :
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
콜 레이션을 사용하거나 다음과 같이 바이너리로 캐스트합니다.
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
varbinary로 변환을 사용하여 쿼리를 만들 수 있습니다. 매우 쉽습니다. 예:
Select * from your_table where convert(varbinary, your_column) = convert(varbinary, 'aBcD')
BINARY_CHECKSUM 사용
SELECT
FROM Users
WHERE
BINARY_CHECKSUM(Username) = BINARY_CHECKSUM(@Username)
AND BINARY_CHECKSUM(Password) = BINARY_CHECKSUM(@Password)
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
... in 절
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
SQL DB에서 Latin1_General_CS를 데이터 정렬로 사용하십시오.
MySQL에서는 데이터 정렬을 변경하지 않고 대소 문자 구분 검색을 수행하려면 다음 과 같이 이진 키워드를 사용 하십시오.
SELECT * FROM table_name WHERE binary username=@search_parameter and binary password=@search_parameter
select * from incidentsnew1
where BINARY_CHECKSUM(CloseBy) = BINARY_CHECKSUM(Upper(CloseBy))
다른 사람들이 말했듯이 대소 문자 구분 검색을 수행 할 수 있습니다. 또는 나와 지정된 열의 데이터 정렬 형식을 변경하십시오. 내 데이터베이스의 사용자 / 암호 열의 경우 다음 명령을 통해 열을 데이터 정렬로 변경합니다.
ALTER TABLE `UserAuthentication` CHANGE `Password` `Password` VARCHAR(255) CHARACTER SET latin1 COLLATE latin1_general_cs NOT NULL;
반응형
'programing tip' 카테고리의 다른 글
matplotlib의 날짜 눈금 및 회전 (0) | 2020.06.28 |
---|---|
푸시 컨트롤러에서 RootViewController를 어떻게 얻습니까? (0) | 2020.06.28 |
간단하게 유지하고 쿼리에서 여러 CTE를 수행하는 방법 (0) | 2020.06.28 |
정규식 및 메모장 ++에서 비 ASCII 문자를 모두 제거하려면 어떻게합니까? (0) | 2020.06.28 |
"int main (vooid)"? (0) | 2020.06.28 |