SQL Case Sensitive String Compare
case sensitive sql server (6)
¿Cómo se comparan las cadenas para que la comparación sea verdadera solo si los casos de cada una de las cadenas son iguales también? Por ejemplo:
Select * from a_table where attribute = ''k''
... devolverá una fila con un atributo de ''K''. No quiero este comportamiento
Al igual que otra alternativa, podría usar HASHBYTES, algo como esto:
SELECT *
FROM a_table
WHERE HASHBYTES(''sha1'', attribute) = HASHBYTES(''sha1'', ''k'')
Puede convertir fácilmente columnas a VARBINARIO (Longitud máxima), la longitud debe ser el máximo que espera para evitar una comparación defectuosa. Es suficiente para establecer la longitud como la longitud de la columna. Recortar la columna te ayuda a comparar el valor real, excepto que el espacio tiene un significado y se valora en las columnas de tu tabla. Esta es una muestra simple y, como puedes ver, recorta el valor de las columnas y luego convierte y compara .:
CONVERT(VARBINARY(250),LTRIM(RTRIM(Column1))) = CONVERT(VARBINARY(250),LTRIM(RTRIM(Column2)))
Espero que esto ayude.
Puede definir el attribute
como INSTR
o usar INSTR
o STRCMP
para realizar su búsqueda.
También puede convertir ese atributo como sensible a mayúsculas y minúsculas utilizando esta sintaxis:
ALTER TABLE Table1
ALTER COLUMN Column1 VARCHAR(200)
COLLATE SQL_Latin1_General_CP1_CS_AS
Ahora su búsqueda será sensible a mayúsculas y minúsculas .
Si desea que la columna no sea sensible de nuevo, utilice
ALTER TABLE Table1
ALTER COLUMN Column1 VARCHAR(200)
COLLATE SQL_Latin1_General_CP1_CI_AS
si usa el navegador sql de Oracle, puede usar;
Select * from a_table where attribute = UPPER(''k'')
si quieres devolver una fila con un atributo de ''K'' y ''k''. Puedes usar;
Select * from a_table where UPPER(attribute) = UPPER(''k'')
Select * from a_table where attribute = ''k'' COLLATE Latin1_General_CS_AS
Hizo el truco.