sensible pasar minúsculas minusculas minuscula mayúsculas mayusculas mayuscula identificar entre distingue detectar con acentos sql sql-server

pasar - ¿Cómo hacer una búsqueda sensible a mayúsculas y minúsculas en la cláusula WHERE(estoy usando SQL Server)?



sql like con acentos (7)

Quiero hacer una búsqueda sensible a mayúsculas / minúsculas en mi consulta SQL. Pero de forma predeterminada, SQL Server no tiene en cuenta el caso de las cadenas.

¿Alguna idea sobre cómo hacer una búsqueda sensible a mayúsculas y minúsculas en consultas SQL?


Al usar colación o conversión a binario, 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

La duplicación de nombre de usuario / contraseña existe para darle al motor la posibilidad de usar índices. La intercalación anterior es una intercalación de mayúsculas y minúsculas, cámbiela a la que necesita si es necesario.

El segundo, lanzar al binario, podría hacerse así:

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


En MySQL, si no desea cambiar la intercalación y desea realizar una búsqueda sensible a mayúsculas y minúsculas, simplemente use una palabra clave binaria como esta:

SELECT * FROM table_name WHERE binary username=@search_parameter and binary password=@search_parameter


Puedes hacer la consulta usando convert to varbinary, es muy fácil. Ejemplo:

Select * from your_table where convert(varbinary, your_column) = convert(varbinary, ''aBcD'')


Se puede hacer cambiando el Collation . Por defecto es insensible a mayúsculas / minúsculas.

Extracto del enlace:

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


usa 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

... en donde cláusula

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

o para encontrar un valor

declare @value_b nvarchar(1) = ''A'' select ValueB + '' = '' + @value_b from @example where hashbytes(''SHA1'', ValueB) = hasbytes(''SHA1'', @value_b) -- output: -- A = A


utilice Latin1_General_CS como su intercalación en su sql db


UTILIZAR BINARY_CHECKSUM

SELECT FROM Users WHERE BINARY_CHECKSUM(Username) = BINARY_CHECKSUM(@Username) AND BINARY_CHECKSUM(Password) = BINARY_CHECKSUM(@Password)