Uno de los escenarios más populares al trabajar con bases de datos es preparar datos para informes. Imagina la situación: trabajas en una universidad y tu jefe (que, por supuesto, no tiene ni idea de SQL) te pide que crees una lista de estudiantes uniendo el nombre y el apellido, y además que muestres la fecha de nacimiento en el formato DD-MM-YYYY. La tarea está clara: hay que dejar los datos bonitos. Y SQL es nuestro colega fiel para esto.
Ejemplo 1: Unir nombre y apellido
Vamos a empezar uniendo el nombre (first_name) y el apellido (last_name) de los estudiantes de nuestra tabla students.
SELECT
CONCAT(first_name, ' ', last_name) AS full_name
FROM
students;
¿Qué pasa aquí?
CONCAT()une cadenas de texto. Añadimos un espacio entre el nombre y el apellido para que quede claro.- El resultado se guarda en una nueva columna
full_name.
El resultado puede verse así:
| full_name |
|---|
| Otto Art |
| Anna Song |
| Pol Mac |
Ejemplo 2: Formatear la fecha
Ahora vamos a añadir el formateo de la fecha de nacimiento a nuestra consulta.
SELECT
CONCAT(first_name, ' ', last_name) AS full_name,
TO_CHAR(birth_date, 'DD-MM-YYYY') AS formatted_birth_date
FROM
students;
¿Qué hay de nuevo aquí?
- Usamos la función
TO_CHAR()sobre el campobirth_date. - El formato
'DD-MM-YYYY'convierte la fecha en algo más cómodo (por ejemplo:25-12-2001).
El resultado:
| full_name | formatted_birth_date |
|---|---|
| Otto Art | 12-04-1995 |
| Anna Song | 03-08-1996 |
| Pol Mac | 21-11-1997 |
¡Voilà! Acabas de crear un informe bonito.
Formateo para exportar datos
Supón que uno de tus colegas quiere exportar datos de pedidos a un archivo CSV para trabajar luego en Excel. Pero los datos en la base están en un formato incómodo para él, y la gente de ventas exige un formato concreto. Por ejemplo, en vez del campo total_price, donde está el precio del pedido, quieren verlo así: $100.00.
Ejemplo 3: Convertir números a formato moneda
Vamos a preparar los datos de pedidos de la tabla orders para exportar:
SELECT
order_id,
TO_CHAR(total_price, 'FM$999,999.00') AS formatted_price
FROM
orders;
¿Qué hace TO_CHAR() aquí?
FM(Fill Mode) quita los espacios de más.$añade el símbolo de moneda.999,999.00pone separadores de miles y dos decimales.
El resultado:
| order_id | formatted_price |
|---|---|
| 1 | $1,000.00 |
| 2 | $2,500.50 |
| 3 | $10.00 |
Ahora tu colega puede importar los datos a Excel fácilmente y presumir de ti en la reunión.
Ejercicio final
Aquí empieza lo más divertido. Vamos a juntar todas las skills que ya tienes.
Enunciado
Crea una consulta para la tabla students que:
- Une el nombre y el apellido en una sola columna
full_name. - Convierte la fecha de nacimiento al formato
DD-MM-YYYY. - Muestra la edad del estudiante a día de hoy.
La consulta sería algo así:
SELECT
CONCAT(first_name, ' ', last_name) AS full_name,
TO_CHAR(birth_date, 'DD-MM-YYYY') AS formatted_birth_date,
DATE_PART('year', AGE(birth_date)) AS age
FROM
students;
Nuevos elementos:
AGE(birth_date)devuelve el intervalo entre la fecha actual y la de nacimiento, pero en años, meses y días.DATE_PART('year', AGE(birth_date))saca solo los años de ese intervalo.
El resultado:
| full_name | formatted_birth_date | age |
|---|---|---|
| Otto Art | 12-04-1995 | 28 |
| Anna Song | 03-08-1996 | 27 |
| Pol Mac | 21-11-1997 | 25 |
Un informe así dejará contentos hasta a los colegas más tiquismiquis.
Formateo para condiciones específicas
A veces hay que formatear datos para crear condiciones o filtrar. Por ejemplo, vamos a sacar los estudiantes que cumplen años este mes.
Ejemplo 4: Filtrar por mes
SELECT
CONCAT(first_name, ' ', last_name) AS full_name,
TO_CHAR(birth_date, 'DD-MM-YYYY') AS formatted_birth_date
FROM
students
WHERE
DATE_PART('month', birth_date) = DATE_PART('month', CURRENT_DATE);
¿Cómo funciona esto?
DATE_PART('month', birth_date)saca el mes de la fecha de nacimiento.CURRENT_DATEte da la fecha de hoy. Sacamos el mes conDATE_PART().
Juntando formateo y ordenación
Ahora vamos a juntar todo lo aprendido y añadir ordenación. Por ejemplo, creamos una lista de estudiantes ordenados por su fecha de nacimiento.
Ejemplo 5: Ordenar por fecha de nacimiento
SELECT
CONCAT(first_name, ' ', last_name) AS full_name,
TO_CHAR(birth_date, 'DD-MM-YYYY') AS formatted_birth_date
FROM
students
ORDER BY
birth_date ASC;
Ordenar en orden ascendente ASC muestra primero a los estudiantes más mayores, y en descendente DESC a los más jóvenes.
Juntando con valores únicos
Para terminar, un reto con estrella. Imagina que nuestra universidad tiene sucursales en varias ciudades y tienes que crear una lista de ciudades únicas donde estudian los estudiantes, pero en orden alfabético.
Ejemplo 6: Valores únicos y ordenación
SELECT DISTINCT
city
FROM
students
ORDER BY
city ASC;
¿Qué hace DISTINCT?
Elimina los valores duplicados, así que en los resultados cada ciudad aparece solo una vez.
¿Para qué sirve todo esto?
Comodidad y belleza. Cuando los datos están bonitos, es más fácil trabajar con ellos y los jefes preguntan menos.
Preparación para la vida real. Vas a poder generar informes automáticamente, trabajar con exportaciones y preparar presentaciones chulas.
Sube tu valor. SQL no es solo datos. Es hacerlos comprensibles y útiles.
Usa lo que has aprendido para no solo escribir consultas, sino crear auténticas obras de arte. En las próximas lecciones seguiremos profundizando en la magia de PostgreSQL.
GO TO FULL VERSION