如何在WHERE子句中区分大小写的search(我正在使用SQL Server)?
我想在我的SQL查询中执行区分大小写的search。 但是默认情况下,SQL Server不考虑string的情况。
任何想法如何在SQL查询中区分大小写的search?
可以通过更改整理来完成。 默认情况下它是不区分大小写的。
摘自链接:
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
存在用户名/密码的重复,以使引擎可以使用索引。 上面的sorting规则是一个区分大小写的sorting规则,如有必要,更改为您需要的sorting规则。
第二,铸造到二进制,可以这样做:
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')
USE 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
…在哪里条款
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
或者find一个值
declare @value_b nvarchar(1) = 'A' select ValueB + ' = ' + @value_b from @example where hashbytes('SHA1', ValueB) = hasbytes('SHA1', @value_b) -- output: -- A = A
在MySQL中,如果您不想更改sorting规则并希望执行区分大小写的search,那么只需使用如下所示的binary关键字:
SELECT * FROM table_name WHERE binary username=@search_parameter and binary password=@search_parameter
使用Latin1_General_CS作为您的SQL数据库中的sorting规则