En la documentación sobre el operador LIKE , no se dice nada sobre la distinción entre mayúsculas y minúsculas. ¿Lo es? ¿Cómo habilitarlo / deshabilitarlo?
Estoy consultando varchar(n)
columnas, en una instalación de Microsoft SQL Server 2005, si eso importa.
sql
sql-server-2005
varchar
sql-like
Marcel
fuente
fuente
LIKE
LIKE
Respuestas:
No es el operador el que distingue entre mayúsculas y minúsculas, es la propia columna.
Cuando se realiza una instalación de SQL Server, se elige una intercalación predeterminada para la instancia. A menos que se mencione explícitamente lo contrario (verifique la cláusula de clasificación a continuación), cuando se crea una nueva base de datos, hereda la clasificación de la instancia y cuando se crea una nueva columna, hereda la clasificación de la base de datos a la que pertenece.
Una colación como
sql_latin1_general_cp1_ci_as
dicta cómo se debe tratar el contenido de la columna. CI significa mayúsculas y minúsculas y AS significa acento sensible.Una lista completa de intercalaciones está disponible en https://msdn.microsoft.com/en-us/library/ms144250(v=sql.105).aspx
(a) Para comprobar una colación de instancias
(b) Para comprobar la intercalación de una base de datos
(c) Para crear una base de datos usando una colación diferente
(d) Para crear una columna usando una colación diferente
(e) Para modificar una clasificación de columnas
Es posible cambiar las intercalaciones de una instancia y de una base de datos, pero no afecta a los objetos creados previamente.
También es posible cambiar una intercalación de columnas sobre la marcha para comparar cadenas, pero esto no es recomendable en un entorno de producción porque es extremadamente costoso.
fuente
[A-Z]
siempre es sensible a las mayúsculas.[ABCDEFGHIJKLMNOPQRSŠTUVWXYZŽÅÄÖ]
sin embargo, parece obedecer a la colación.select COLLATION_NAME, iif(cast(COLLATIONPROPERTY(COLLATION_NAME, 'ComparisonStyle') as int) & 1 = 0, 'case sensitive', 'case insensitive') from INFORMATION_SCHEMA.COLUMNS where TABLE_NAME = 'exampletable' and COLUMN_NAME = 'examplecolumn'
Toda esta charla sobre colación parece un poco complicada. ¿Por qué no usar algo como:
Entonces su cheque no distingue entre mayúsculas y minúsculas sea cual sea la colación
fuente
like 'a%'
podría usar el índice y laupper
versión no.like
operador distingue entre mayúsculas y minúsculas.Latin1_General_CI_AS
, entonces hacerUPPER(@@VALUE) NOT LIKE '%SOMETHING%'
o@@COLUMN NOT LIKE '%SOMETHING%'
es irrelevante: el resultado sería el mismo.Tiene una opción para definir el orden de clasificación en el momento de definir su tabla. Si define un orden sensible a mayúsculas y minúsculas, su
LIKE
operador se comportará de manera sensible a mayúsculas y minúsculas; Si define un orden de clasificación que no distingue entre mayúsculas y minúsculas, elLIKE
operador también ignorará las mayúsculas y minúsculas:Aquí hay una demostración rápida de sqlfiddle que muestra los resultados del orden de clasificación en las búsquedas con
LIKE
.fuente
Si desea lograr una búsqueda sensible a mayúsculas y minúsculas sin cambiar la intercalación de la columna / base de datos / servidor, siempre puede usar la
COLLATE
cláusula, por ejemploTambién funciona al revés, si su columna / base de datos / servidor distingue entre mayúsculas y minúsculas y no desea una búsqueda que distinga entre mayúsculas y minúsculas, por ejemplo
fuente
WHERE bar COLLATE Latin1_General_CS_AS LIKE '[j-k]%'
devolveráJohn
ya que en esta intercalación el capitalJ
está entre minúsculasj
y minúsculask
. Es como siaAbBcC...jJkKlLmM...
no fuera obvio. Parece queLatin1_General_BIN
es más predecible con búsquedas de rango con operador LIKE.El
like
operador toma dos cuerdas. Estas cadenas deben tener intercalaciones compatibles, como se explica aquí .En mi opinión, las cosas se complican luego. La siguiente consulta devuelve un error que indica que las intercalaciones son incompatibles:
En una máquina aleatoria aquí, la intercalación predeterminada es
SQL_Latin1_General_CP1_CI_AS
. La siguiente consulta es correcta, pero no devuelve filas:Los valores "abc" y "ABC" no coinciden en un mundo sensible a mayúsculas y minúsculas.
En otras palabras, existe una diferencia entre no tener colación y usar la colación predeterminada. Cuando un lado no tiene colación, entonces se le "asigna" una colación explícita del otro lado.
(Los resultados son los mismos cuando la intercalación explícita está a la izquierda).
fuente
Intenta correr
Luego, averigüe si su intercalación distingue entre mayúsculas y minúsculas o no.
fuente
Puede cambiar la propiedad de cada artículo.
fuente
Puede cambiar fácilmente la intercalación en Microsoft SQL Server Management Studio.
fuente