Funciones de texto: construir, localizar y normalizar cadenas
Los textos suelen llegar con mayúsculas diferentes, espacios adicionales o fragmentos que necesitamos localizar. SQL Server incluye funciones para combinar, extraer, buscar, reemplazar y normalizar cadenas sin salir de la consulta.
Cada función resuelve una operación pequeña. La parte importante es distinguir una transformación de presentación de una corrección permanente de datos.
Funciones principales
| Función | Uso |
|---|---|
CONCAT |
Une valores y trata los nulos como cadenas vacías |
SUBSTRING |
Extrae una parte desde una posición y longitud |
CHARINDEX |
Devuelve la posición de un texto dentro de otro |
REPLACE |
Sustituye todas las apariciones de una cadena |
TRIM |
Retira espacios al inicio y al final |
UPPER y LOWER |
Cambian el uso de mayúsculas y minúsculas |
Ejemplo: construir una descripción
SELECT
p.IdProducto,
CONCAT(
p.Nombre,
N' - $',
CONVERT(VARCHAR(20), p.Precio)
) AS Descripcion
FROM dbo.Producto AS p;
CONCAT convierte sus argumentos a texto y no vuelve nulo todo el resultado cuando uno de ellos es NULL. Para formatos numéricos destinados al usuario final suele ser mejor que la aplicación se encargue de moneda y cultura.
Limpiar espacios y unificar comparación visual
SELECT
c.IdCliente,
TRIM(c.TelefonoMovil) AS TelefonoLimpio,
LOWER(TRIM(c.Correo)) AS CorreoNormalizado
FROM dbo.Cliente AS c;
La consulta transforma el resultado; no modifica los valores almacenados. Para corregir la tabla necesitamos un UPDATE deliberado y una validación previa.
Localizar y extraer una parte
Podemos separar el dominio de un correo buscando primero el carácter @:
SELECT
c.Correo,
CASE
WHEN CHARINDEX('@', c.Correo) > 0 THEN
SUBSTRING(
c.Correo,
CHARINDEX('@', c.Correo) + 1,
LEN(c.Correo)
)
ELSE NULL
END AS Dominio
FROM dbo.Cliente AS c;
La condición evita asumir que todos los valores contienen el separador. Este ejemplo ayuda a explorar datos, pero no sustituye una validación completa de direcciones de correo.
Reemplazar fragmentos
SELECT REPLACE(N'Pedido pendiente', N'pendiente', N'confirmado') AS TextoNuevo;
REPLACE sustituye todas las coincidencias que reconoce la intercalación utilizada. La sensibilidad a mayúsculas y acentos depende de esa configuración.
Texto Unicode y longitudes
El prefijo N crea literales Unicode, por ejemplo N'México'. Conviene utilizarlo cuando el destino es NVARCHAR y el texto puede contener caracteres fuera de la página de códigos de VARCHAR.
LEN no cuenta espacios finales. DATALENGTH devuelve bytes, no caracteres. Esa diferencia importa al diagnosticar longitudes, almacenamiento y espacios aparentemente invisibles.
Qué conviene comprobar
Aplicar UPPER, LOWER, TRIM u otra función directamente sobre una columna filtrada puede dificultar el uso de un índice. Si la búsqueda normalizada es frecuente, debemos revisar intercalación, calidad del dato o una estrategia de almacenamiento adecuada.
También debemos conocer el tipo y la longitud resultante al concatenar. Los resultados muy extensos pueden truncarse si ninguna expresión promueve el cálculo a un tipo de longitud máxima.
Relacionado con
COALESCEyNULLIF: distinguen valores nulos, vacíos y alternativos.- Conversiones: controlan cómo se incorporan números y fechas a una cadena.
LIKE: busca patrones sin extraer una posición.STRING_AGGySTRING_SPLIT: combinan varias filas o dividen listas.