WHERE 절(SQL Server 사용 중)에서 대소문자를 구분하는 검색 방법은 무엇입니까?
SQL 쿼리에서 대소문자를 구분하는 검색을 수행하려고 합니다.그러나 기본적으로는 SQL Server는 문자열의 대소문자를 고려하지 않습니다.
SQL 쿼리에서 대소문자를 구분하는 검색 방법을 알고 계십니까?
데이터 정렬을 변경하여 수행할 수 있습니다.기본적으로는 대소문자를 구분하지 않습니다.
링크에서 발췌:
SELECT 1
FROM dbo.Customers
WHERE CustID = @CustID COLLATE SQL_Latin1_General_CP1_CS_AS
AND OrderID = @OrderID COLLATE SQL_Latin1_General_CP1_CS_AS
대소문자를 구분하기 위해 COLATE를 LIKE에 적용할 수도 있습니다.
SELECT *
FROM tbl_Partners
WHERE PartnerName COLLATE SQL_Latin1_General_CP1_CS_AS LIKE 'MyEx%' 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
2진수로 변환하여 쿼리를 작성할 수 있습니다.이 작업은 매우 간단합니다.예:
Select * from your_table where convert(varbinary, your_column) = convert(varbinary, 'aBcD')
이진_CHECKSUM 사용
SELECT
FROM Users
WHERE
BINARY_CHECKSUM(Username) = BINARY_CHECKSUM(@Username)
AND BINARY_CHECKSUM(Password) = BINARY_CHECKSUM(@Password)
해시 바이트 사용
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
Latin1_General_ 사용sql db에서의 대조로서 CS를 사용합니다.
MySQL에서 데이터 정렬을 변경하지 않고 대소문자를 구분하여 검색하려면 다음과 같은 binary 키워드를 사용하십시오.
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 UserMaster
Alter Column Password varchar(50) COLLATE SQL_Latin1_General_CP1_CS_AS
Entity Framework 접근법에 관심이 있는 경우:
var customers = context.Customers
.Where(c => EF.Functions.Collate(c.Name, "SQL_Latin1_General_CP1_CS_AS") == "John")
.ToList();
참조: https://learn.microsoft.com/en-us/ef/core/miscellaneous/collations-and-case-sensitivity#explicit-collation-in-a-query
다른 사용자가 말한 대로 대소문자를 구분하는 검색을 수행할 수 있습니다.또는 지정된 컬럼의 조합 형식을 저로 변경할 수도 있습니다.데이터베이스의 User/Password 열에 대해 다음 명령을 사용하여 정렬로 변경합니다.
ALTER TABLE `UserAuthentication` CHANGE `Password` `Password` VARCHAR(255) CHARACTER SET latin1 COLLATE latin1_general_cs NOT NULL;
언급URL : https://stackoverflow.com/questions/1831105/how-to-do-a-case-sensitive-search-in-where-clause-im-using-sql-server
'programing' 카테고리의 다른 글
TSQL 피벗(애그리게이트 기능 없음) (0) | 2023.04.07 |
---|---|
개별 항목에 액세스할 수 있도록 구분된 문자열을 분할하려면 어떻게 해야 합니까? (0) | 2023.04.07 |
기존 테이블에서 열을 제거하려면 어떻게 해야 합니까? (0) | 2023.04.07 |
SQL Server의 add column 문에 명명된 기본 제약 조건을 만들 수 있습니까? (0) | 2023.04.07 |
WHERE 절의 컬럼에일리어스 참조 (0) | 2023.04.07 |