SQL Case Sensitive String Compare
Como se comparam as cadeias de modo que a comparação só é verdadeira se os casos de cada uma delas forem iguais também. Por exemplo:
Select * from a_table where attribute = 'k'
...irá devolver uma linha com um atributo de 'K'. Não quero este comportamento.
6 answers
Select * from a_table where attribute = 'k' COLLATE Latin1_General_CS_AS
Fiz o truque.
Você também pode converter esse atributo como case sensitive Usando esta sintaxe :
ALTER TABLE Table1
ALTER COLUMN Column1 VARCHAR(200)
COLLATE SQL_Latin1_General_CP1_CS_AS
Agora a sua pesquisa será sensível a maiúsculas.
Se quiser tornar essa coluna insensível à case de novo, então use
ALTER TABLE Table1
ALTER COLUMN Column1 VARCHAR(200)
COLLATE SQL_Latin1_General_CP1_CI_AS
Você pode facilmente converter colunas para VARBINARY( comprimento máximo), o comprimento deve ser o máximo que você espera para evitar uma comparação defeituosa, é suficiente para definir o comprimento como o comprimento da coluna. Aparar coluna ajuda você a comparar o valor real exceto o espaço tem um significado e valorizado em suas colunas de tabela, esta é uma amostra simples e como você pode ver Eu aparar o valor das colunas e, em seguida, converter e comparar.:
CONVERT(VARBINARY(250),LTRIM(RTRIM(Column1))) = CONVERT(VARBINARY(250),LTRIM(RTRIM(Column2)))
Espero que isto ajude.
Assim como outra alternativa que você poderia usar HASHBYTES, algo assim:
SELECT *
FROM a_table
WHERE HASHBYTES('sha1', attribute) = HASHBYTES('sha1', 'k')
Pode definir attribute
como BINARY
ou utilizar INSTR
ou STRCMP
para efectuar a sua pesquisa.
Se usar o navegador SQL oracle, pode usar;
Select * from a_table where attribute = UPPER('k')
Se quiser devolver uma linha com um atributo de 'K' e 'k'. Você pode usar;
Select * from a_table where UPPER(attribute) = UPPER('k')