Vee*_*era 134 sql sql-server
我想在我的SQL查询中进行区分大小写的搜索.但默认情况下,SQL Server不考虑字符串的大小写.
有关如何在SQL查询中进行区分大小写搜索的任何想法?
Jon*_*oln 157
通过使用排序规则或转换为二进制,如下所示:
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
Run Code Online (Sandbox Code Playgroud)
存在用户名/密码的重复以使引擎具有使用索引的可能性.上面的排序规则是区分大小写的排序规则,如有必要,请更改为您需要的排序规则.
第二个,转换为二进制,可以这样做:
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
Run Code Online (Sandbox Code Playgroud)
Ash*_*ain 148
可以通过更改排序来完成.默认情况下,它不区分大小写.
摘自链接:
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
Run Code Online (Sandbox Code Playgroud)
Jua*_*lez 14
您可以使用convert to varbinary进行查询 - 这很容易.例:
Select * from your_table where convert(varbinary, your_column) = convert(varbinary, 'aBcD')
Run Code Online (Sandbox Code Playgroud)
小智 7
使用BINARY_CHECKSUM
SELECT
FROM Users
WHERE
BINARY_CHECKSUM(Username) = BINARY_CHECKSUM(@Username)
AND BINARY_CHECKSUM(Password) = BINARY_CHECKSUM(@Password)
Run Code Online (Sandbox Code Playgroud)
在 MySQL 中,如果您不想更改排序规则并希望执行区分大小写的搜索,则只需使用二进制关键字,如下所示:
SELECT * FROM table_name WHERE binary username=@search_parameter and binary password=@search_parameter
Run Code Online (Sandbox Code Playgroud)
使用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
Run Code Online (Sandbox Code Playgroud)
......在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
Run Code Online (Sandbox Code Playgroud)
或找到一个价值
declare @value_b nvarchar(1) = 'A'
select ValueB + ' = ' + @value_b
from @example
where hashbytes('SHA1', ValueB) = hasbytes('SHA1', @value_b)
-- output:
-- A = A
Run Code Online (Sandbox Code Playgroud)