Problema: La mayoría de las instalaciones de SQL Server se instalan con la configuración regional predeterminada, que es insensible a mayúsculas y minúsculas. Esto significa que SQL Server ignora la diferencia entre mayúsculas y minúsculas de los caracteres y trata la cadena ‘1 Summer Way’ como igual a la cadena ‘1 summer way’. Si necesita diferenciar estos valores y no puede cambiar la configuración regional en el servidor, la base de datos o la columna, ¿cómo puede diferenciar estos valores?
Solución: Una opción es especificar la configuración regional en la consulta para usar una configuración sensible a mayúsculas y minúsculas. Veamos un ejemplo de una búsqueda sensible a mayúsculas y minúsculas en un SQL Server insensible a mayúsculas y minúsculas.
¿Qué es la configuración regional?
Como puede ver, este SQL Server tiene una configuración regional insensible a mayúsculas y minúsculas, es decir, CI.
SELECT SERVERPROPERTY ('Collation')
GO
Conjunto de resultados: SQL_Latin1_General_CP1_CI_AS
Crear base de datos y datos de muestra
-- Seleccionar la base de datos para crear estos objetos
USE [NombreDeTuBaseDeDatos]
GO
-- Crear la tabla
CREATE TABLE [dbo].[PruebaSensibleAMayusculas] (
[UID] [int] NOT NULL ,
[Valor1] [varchar] (50) COLLATE SQL_Latin1_General_CP1_CI_AS NOT NULL ,
[DescValor1] [varchar] (50) COLLATE SQL_Latin1_General_CP1_CI_AS NOT NULL
) ON [PRIMARY]
GO
-- Agregar clave primaria
ALTER TABLE [dbo].[PruebaSensibleAMayusculas] WITH NOCHECK ADD
CONSTRAINT [PK_PruebaSensibleAMayusculas] PRIMARY KEY CLUSTERED
(
[UID]
) ON [PRIMARY]
GO
-- Seleccionar la configuración regional del servidor y la información de ordenación
SELECT SERVERPROPERTY('Collation'),
SERVERPROPERTY('SqlSortOrder')
GO
-- Insertar registros de prueba
INSERT INTO PruebaSensibleAMayusculas VALUES (1, 'PRUEBA', 'Todo en mayúsculas')
INSERT INTO PruebaSensibleAMayusculas VALUES (2, 'prueba', 'Todo en minúsculas')
INSERT INTO PruebaSensibleAMayusculas VALUES (3, 'Prueba', 'Mayúsculas y minúsculas')
INSERT INTO PruebaSensibleAMayusculas VALUES (4, 'PRUEBA1', 'Todo en mayúsculas')
INSERT INTO PruebaSensibleAMayusculas VALUES (5, 'prueba1', 'Todo en minúsculas')
INSERT INTO PruebaSensibleAMayusculas VALUES (6, 'Prueba1', 'Mayúsculas y minúsculas')
INSERT INTO PruebaSensibleAMayusculas VALUES (7, '123Prueba', 'Mayúsculas y minúsculas')
¿Cómo se ve la muestra de datos?
Los datos de muestra tienen una mezcla de datos en mayúsculas, minúsculas y mayúsculas y minúsculas, como muestran los 7 registros a continuación.
-- Seleccionar todos los registros donde el valor es similar a Prueba
SELECT *
FROM dbo.PruebaSensibleAMayusculas
WHERE Valor1 LIKE '%Prueba%'
GO
Conjunto de resultados:
UID | Valor1 | DescValor1 |
---|---|---|
1 | PRUEBA | Todo en mayúsculas |
2 | prueba | Todo en minúsculas |
3 | Prueba | Mayúsculas y minúsculas |
4 | PRUEBA1 | Todo en mayúsculas |
5 | prueba1 | Todo en minúsculas |
6 | Prueba1 | Mayúsculas y minúsculas |
7 | 123Prueba | Mayúsculas y minúsculas |
¿Cómo puedo capturar solo las filas con los valores de prueba en mayúsculas y minúsculas, es decir, ‘Prueba’?
Echa un vistazo a esta consulta donde se utiliza una configuración regional sensible a mayúsculas y minúsculas:
-- Seleccionar todos los registros donde el valor es similar a Prueba
SELECT *
FROM dbo.PruebaSensibleAMayusculas
WHERE Valor1 LIKE '%Prueba%' COLLATE SQL_Latin1_General_Cp1_CS_AS
GO
Conjunto de resultados:
UID | Valor1 | DescValor1 |
---|---|---|
3 | Prueba | Mayúsculas y minúsculas |
6 | Prueba1 | Mayúsculas y minúsculas |
7 | 123Prueba | Mayúsculas y minúsculas |
Como puede ver, solo se devuelven los 3 registros donde la cadena ‘Prueba’ está en mayúsculas y minúsculas.