Published on

October 20, 2024

Cómo diferenciar valores sensibles a mayúsculas y minúsculas en SQL Server

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:

UIDValor1DescValor1
1PRUEBATodo en mayúsculas
2pruebaTodo en minúsculas
3PruebaMayúsculas y minúsculas
4PRUEBA1Todo en mayúsculas
5prueba1Todo en minúsculas
6Prueba1Mayúsculas y minúsculas
7123PruebaMayú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:

UIDValor1DescValor1
3PruebaMayúsculas y minúsculas
6Prueba1Mayúsculas y minúsculas
7123PruebaMayúsculas y minúsculas

Como puede ver, solo se devuelven los 3 registros donde la cadena ‘Prueba’ está en mayúsculas y minúsculas.

Click to rate this post!
[Total: 0 Average: 0]

Let's work together

Send us a message or book free introductory meeting with us using button below.