Saltar al contenido

¿El operador LIKE distingue entre mayúsculas y minúsculas con MSSQL Server?

Solución:

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 sin distinción entre mayúsculas y minúsculas y AS significa sensible al acento.

Una lista completa de intercalaciones está disponible en https://msdn.microsoft.com/en-us/library/ms144250(v=sql.105).aspx

(a) Para comprobar una intercalación de instancias

select serverproperty('collation')

(b) Para comprobar la intercalación de una base de datos

select databasepropertyex('databasename', 'collation') sqlcollation

(c) Para crear una base de datos usando una colación diferente

create database exampledatabase
collate sql_latin1_general_cp1_cs_as 

(d) Para crear una columna usando una colación diferente

create table exampletable (
    examplecolumn varchar(10) collate sql_latin1_general_cp1_ci_as null
)

(e) Para modificar una intercalación de columnas

alter table exampletable
alter column examplecolumn varchar(10) collate sql_latin1_general_cp1_ci_as null

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 clasificación de columnas sobre la marcha para la comparación de cadenas, pero esto no es recomendable en un entorno de producción porque es extremadamente costoso.

select
  column1 collate sql_latin1_general_cp1_ci_as as column1
from table1

Toda esta charla sobre colación parece un poco complicada. ¿Por qué no usar algo como:

IF UPPER(@@VERSION) NOT LIKE '%AZURE%'

Entonces su cheque no distingue entre mayúsculas y minúsculas sea cual sea la intercalación

Tienes una opción para definir orden de clasificación a la hora de definir tu mesa. Si define un orden que distingue entre mayúsculas y minúsculas, su LIKE el operador se comportará de forma sensible a mayúsculas y minúsculas; si define un orden de clasificación que no distingue entre mayúsculas y minúsculas, el LIKE El operador también ignorará las mayúsculas y minúsculas:

CREATE TABLE Test (
    CI_Str VARCHAR(15) COLLATE Latin1_General_CI_AS -- Case-insensitive
,   CS_Str VARCHAR(15) COLLATE Latin1_General_CS_AS -- Case-sensitive
);

Aquí hay una demostración rápida de sqlfiddle que muestra los resultados del orden de clasificación en búsquedas con LIKE.

¡Haz clic para puntuar esta entrada!
(Votos: 0 Promedio: 0)



Utiliza Nuestro Buscador

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *