2010-10-19 32 views
144

¿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:SQL Case Sensitive String Comparar

Select * from a_table where attribute = 'k' 

... devolverá una fila con un atributo de 'K'. No quiero este comportamiento

+0

Puede que no sea lo que necesita, pero puede cambiar la intercalación o utilizar una intercalación específica en su consulta. – Kane

+5

¿Qué producto SQL? – onedaywhen

Respuesta

260
Select * from a_table where attribute = 'k' COLLATE Latin1_General_CS_AS 

Hicieron el truco.

+1

Normalmente utilizaría Latin1_General_Bin – gbn

+3

Sí, el método estándar es utilizar una intercalación que no distingue entre mayúsculas y minúsculas, aunque las colaciones en sí son específicas del proveedor. ¿Es la sintaxis de SQL Server? – onedaywhen

+0

En mi caso, tengo 1 columna en mi db que distingue entre mayúsculas y minúsculas. Necesitaba compararlo con una columna estándar (CI). Utilicé una variación de este WHERE Foo.Bar = (Baz.Bar COLLATE Latin1_General_CS_AS) – Hypnovirus

3

Puede definir attribute como o usar INSTR o STRCMP para realizar su búsqueda.

29

También puede convertir ese atributo como mayúsculas y minúsculas con esta sintaxis:

ALTER TABLE Table1 
ALTER COLUMN Column1 VARCHAR(200) 
COLLATE SQL_Latin1_General_CP1_CS_AS 

Ahora su búsqueda se mayúsculas y minúsculas.

Si desea realizar ese caso la columna insensibles de nuevo, a continuación, utilizar

ALTER TABLE Table1 
ALTER COLUMN Column1 VARCHAR(200) 
COLLATE SQL_Latin1_General_CP1_CI_AS 
12

usted puede convertir fácilmente columnas a VARBINARY (Longitud máxima), la longitud debe ser la máxima que espere para evitar defectuosa comparación, es suficiente para establecer la longitud como la longitud de la columna. Recorte ayuda columna que permite comparar el valor real, salvo el espacio tiene un significado y un valor en las columnas de tabla, esta es una muestra simple y como se puede ver que recortar el valor de las columnas y luego convertir y comparar .:

CONVERT(VARBINARY(250),LTRIM(RTRIM(Column1))) = CONVERT(VARBINARY(250),LTRIM(RTRIM(Column2))) 

Espero que esto ayude.

+2

exactamente lo que estaba buscando. Una forma simple de hacer una comparación sensible a mayúsculas y minúsculas para encontrar entradas que contengan caracteres en mayúscula. –

10

Así como otra alternativa que podría utilizar HASHBYTES, algo como esto:

SELECT * 
FROM a_table 
WHERE HASHBYTES('sha1', attribute) = HASHBYTES('sha1', 'k') 
-5

si utiliza Oracle SQL Navigator, puede utilizar;

Select * from a_table where attribute = UPPER('k') 

si desea devolver una fila con un atributo de 'K' y 'k'. Puedes usar;

Select * from a_table where UPPER(attribute) = UPPER('k') 
+1

Esto es incorrecto. Devolverá filas con 'k' y 'K', que es exactamente lo que NO desea el cartel original. –

+0

@RandScullard lo siento, pero debería ser así para Oracle sql. Estoy trabajando con Oracle sql Navigator – elfekz