如何在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规则