minusculas minuscula mayusculas ejemplos distinguir diferenciar con buscar acentos sql-server-2008 pattern-matching sql-like collate

sql-server-2008 - ejemplos - mysql like mayusculas y minusculas



¿Cómo realizo una búsqueda que distingue entre mayúsculas y minúsculas utilizando LIKE? (3)

Intente usar COLLATE Latin1_General_BIN lugar de COLLATE Latin1_General_CS_AS

Estoy tratando de encontrar registros que contengan una cadena de 6 o más caracteres alfanuméricos en mayúsculas. Algunos ejemplos:

PENDING 3RDPARTY CODE27

Estoy usando la siguiente declaración:

SELECT Details FROM MyTable WHERE Details LIKE ''%[0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z]%'';

Esto es devolver todos los registros que contienen cualquier palabra de 6 o más letras, independientemente del caso.

He añadido una declaración COLLATE :

SELECT Details FROM MyTable WHERE Details COLLATE Latin1_General_CS_AS LIKE ''%[0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z]%'';

Esto no cambia nada. Todavía devuelve registros con una palabra de 6 o más letras, independientemente del caso.

Solo como una prueba, probé:

SELECT Details FROM MyTable WHERE Details COLLATE Latin1_General_CS_AS LIKE ''%pending%''; SELECT Details FROM MyTable WHERE Details COLLATE Latin1_General_CS_AS LIKE ''%PENDING%'';

Ambos trabajaron, devolviendo registros que contienen "pendiente" y "PENDIENTE" respectivamente. Así que el problema parece por la coincidencia de patrón de LIKE claus.

¿Qué puedo hacer para realizar esta búsqueda que distingue entre mayúsculas y minúsculas?


Yo uso lo siguiente:

SELECT COUNT(*) FROM Person.Person WHERE LastName COLLATE Latin1_General_CS_AS != upper(LastName) COLLATE Latin1_General_CS_AS


Actualización debido a @GeraldSv : Use Latin1_General_BIN

SELECT Details FROM MyTable WHERE Details LIKE ''%[0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z]%'' COLLATE Latin1_General_BIN;

Debe colocar el especificador de intercalación después de la cadena que debe coincidir en lugar de la columna:

SELECT Details FROM MyTable WHERE Details LIKE ''%[0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z]%'' COLLATE Latin1_General_CS_AS;

Actualización: Si bien mi respuesta anterior es correcta, hay un error registrado en Connect: Case-SENSITIVITY no funciona cuando se utiliza un rango similar con COLLATE Latin1_General_CS_AS que Microsoft ha marcado como ''Por diseño''.

Verifiqué utilizando AdventureWorks2008R2 (no distingue mayúsculas de minúsculas, fuera de la caja por defecto), en la tabla Person.Person Cambié 3 últimos apellidos que terminaron en ''n'' a ''N'', y luego ejecuté las siguientes consultas:

SELECT COUNT(*) FROM Person.Person WHERE LastName LIKE ''%N'' COLLATE Latin1_General_CS_AS

Éxito. Devuelve 3 filas como se esperaba.

SELECT COUNT(*) FROM Person.Person WHERE LastName LIKE ''%[N]'' COLLATE Latin1_General_CS_AS

Éxito. Devuelve 3 filas como se esperaba.

SELECT COUNT(*) FROM Person.Person WHERE LastName LIKE ''%[N-N]'' COLLATE Latin1_General_CS_AS

Éxito. Devuelve 3 filas como se esperaba.

SELECT COUNT(*) FROM Person.Person WHERE LastName LIKE ''%[M-N]'' COLLATE Latin1_General_CS_AS

Falla Devuelve 3334 filas (que son todos los apellidos que terminan en ''n'' y ''N'')

Actualización: Gracias a @GeraldSv, esto funciona:

SELECT COUNT(*) FROM Person.Person WHERE LastName LIKE ''%[M-N]'' COLLATE Latin1_General_BIN