Cuando trabajamos con bases de datos, los valores no siempre se limitan a números. También necesitamos cadenas de texto (como nombres o descripciones) y fechas (como la fecha de contratación de un empleado).
SQL ofrece un conjunto muy útil de funciones de texto y fecha que permiten:
- Normalizar datos (ej. pasar todo a mayúsculas).
- Extraer fragmentos de información (ej. año de una fecha).
- Realizar cálculos (ej. días de diferencia entre dos fechas).
En este artículo aprenderás a usar estas funciones con ejemplos prácticos que puedes ejecutar directamente en db-fiddle.com.
Funciones de texto en SQL
Algunas funciones comunes que encontrarás en distintos motores SQL:
| Función | Descripción | Ejemplo |
|---|---|---|
UPPER() | Convierte texto a mayúsculas | UPPER(nombre) |
LOWER() | Convierte texto a minúsculas | LOWER(nombre) |
CONCAT() | Une cadenas de texto | CONCAT(nombre, ' ', puesto) |
SUBSTRING() | Extrae una parte del texto | SUBSTRING(nombre FROM 1 FOR 3) |
TRIM() | Elimina espacios en blanco | TRIM(nombre) |
LENGTH() | Devuelve la longitud de una cadena | LENGTH(nombre) |
Ejemplo 1: Nombre completo en mayúsculas
SELECT UPPER(nombre) AS nombre_mayusculas
FROM empleados; Ejemplo 2: Inicial del empleado
SELECT nombre,
SUBSTRING(nombre, 1, 1) AS inicial
FROM empleados; Ejemplo 3: Nombre y puesto concatenados
SELECT CONCAT(nombre, ' - ', puesto) AS descripcion
FROM empleados; Funciones de fecha en SQL
El soporte varía según el motor, pero las más comunes son:
| Función | SQL Server | PostgreSQL/MySQL/SQLite |
|---|---|---|
| Fecha actual | GETDATE() | CURRENT_DATE o NOW() |
| Extraer año/mes/día | YEAR(), MONTH() | EXTRACT(YEAR FROM fecha) |
| Diferencia de fechas | DATEDIFF() | AGE() (Postgres) / DATEDIFF() (MySQL) |
| Sumar/restar fechas | DATEADD() | fecha + INTERVAL 'x days' |
Ejemplo 4: Años de antigüedad de un empleado
-- SQL Server
SELECT nombre,
DATEDIFF(YEAR, fecha_contratacion, GETDATE()) AS antiguedad_anios
FROM empleados;
-- PostgreSQL / MySQL
SELECT nombre,
EXTRACT(YEAR FROM AGE(CURRENT_DATE, fecha_contratacion)) AS antiguedad_anios
FROM empleados; Ejemplo 5: Empleados contratados en 2022
-- SQL Server
SELECT nombre, fecha_contratacion
FROM empleados
WHERE YEAR(fecha_contratacion) = 2022;
-- PostgreSQL
SELECT nombre, fecha_contratacion
FROM empleados
WHERE EXTRACT(YEAR FROM fecha_contratacion) = 2022; Buenas prácticas
- Haz CAST explícito si combinas tipos de datos (especialmente en CONCAT).
- Normaliza fechas (usa siempre el mismo formato).
- Evita aplicar funciones en la cláusula
WHEREsobre columnas con índices (puede afectar rendimiento). - Documenta reglas de negocio (ej. cómo defines “antigüedad”).
Diferencias entre motores SQL
- SQL Server: funciones como
GETDATE(),YEAR(),DATEADD()yDATEDIFF()son comunes. - PostgreSQL: muy flexible, permite
AGE()yEXTRACT(). - MySQL: soporta
DATEDIFF()yDATE_ADD(). - SQLite: menos funciones nativas, pero soporta
date(),strftime().
Conclusión
Las funciones de texto y fecha en SQL te permiten manipular y transformar la información para generar reportes más útiles y responder preguntas clave del negocio.
Dominar estas funciones te convertirá en un usuario más versátil y preparado para cualquier análisis de datos.
Empieza ahora mismo a practicar con los ejemplos de este artículo en db-fiddle.com.