Expresiones en SQL: Cálculos y manipulaciones
SQL no solo recupera datos, también permite hacer cálculos, transformar texto y crear lógica condicional directamente en las consultas.
Operaciones aritméticas
Puedes usar operadores matemáticos en el SELECT:
SELECT title, 2025 - year AS antiguedad
FROM videogames;Concatenación de texto
En SQLite, se usa || para unir cadenas de texto:
SELECT title || ' (' || year || ')' AS info
FROM videogames;CASE WHEN: Lógica condicional
CASE WHEN permite crear columnas con valores basados en condiciones, similar a un if/else:
SELECT title,
CASE
WHEN year < 2000 THEN 'Clásico'
WHEN year < 2015 THEN 'Moderno'
ELSE 'Reciente'
END AS categoria
FROM videogames;Alias con AS
La palabra clave AS te permite dar un nombre personalizado a una columna calculada. Ya lo hemos visto en los ejemplos anteriores.
Funciones de texto
SQL incluye funciones para transformar cadenas de texto directamente en tus consultas. Estas son las más utilizadas en SQLite:
| Función | Descripción | Ejemplo |
|---|---|---|
UPPER(texto) | Convierte a mayúsculas | UPPER('hola') → 'HOLA' |
LOWER(texto) | Convierte a minúsculas | LOWER('HOLA') → 'hola' |
LENGTH(texto) | Devuelve el número de caracteres | LENGTH('Zelda') → 5 |
SUBSTR(texto, inicio, longitud) | Extrae una parte del texto | SUBSTR('Minecraft', 1, 4) → 'Mine' |
TRIM(texto) | Elimina espacios al inicio y al final | TRIM(' hola ') → 'hola' |
REPLACE(texto, buscar, reemplazo) | Reemplaza ocurrencias | REPLACE('2015-03-20', '-', '/') → '2015/03/20' |
Por ejemplo, para mostrar los títulos en mayúsculas:
SELECT UPPER(title) AS titulo_mayusculas FROM videogames;Funciones numéricas
También puedes aplicar funciones matemáticas a valores numéricos:
| Función | Descripción | Ejemplo |
|---|---|---|
ROUND(número, decimales) | Redondea al número de decimales indicado | ROUND(3.14159, 2) → 3.14 |
ABS(número) | Devuelve el valor absoluto | ABS(-42) → 42 |
ROUND es especialmente útil cuando haces divisiones o promedios y quieres resultados legibles:
SELECT title, ROUND(playtime_hours * 1.0 / 12, 1) AS horas_por_mes
FROM videogames;Ten en cuenta que
MINyMAXtambién pueden usarse como funciones escalares (no solo como funciones de agregación). Por ejemplo,MIN(a, b)devuelve el menor de dos valores en una expresión.
Nuestra tabla
| id | title | developer | year | playtime_hours |
|---|---|---|---|---|
| 1 | The Legend of Zelda | Nintendo | 1986 | 20 |
| 2 | Super Mario Bros. | Nintendo | 1985 | 10 |
| 3 | Final Fantasy VII | Square Enix | 1997 | 40 |
| 4 | The Witcher 3 | CD Projekt Red | 2015 | 100 |
| 5 | Minecraft | Mojang Studios | 2011 | 9999 |
| 6 | Grand Theft Auto V | Rockstar Games | 2013 | 80 |
| 7 | Dark Souls | FromSoftware | 2011 | 60 |
| 8 | Portal 2 | Valve | 2011 | 8 |
| 9 | Red Dead Redemption 2 | Rockstar Games | 2018 | 70 |
| 10 | The Last of Us | Naughty Dog | 2013 | 15 |
| 11 | Halo: Combat Evolved | Bungie | 2001 | 10 |
| 12 | God of War | Santa Monica Studio | 2018 | 25 |