Pregunta 1¿Cuál de los siguientes es el resultado correcto de SELECT 10 % 3;?
Funciones ① — Aritmética, Concatenación de cadenas y Funciones de fecha
El primero de tres artículos sobre funciones SQL. Cubre los operadores aritméticos + - * / %, la concatenación de cadenas con || y CONCAT, y funciones de fecha como la marca de tiempo actual y la extracción de año / mes — todo sobre un conjunto de datos staff cargado desde CSV.
Datos usados en este artículo — la tabla staff
A partir de este artículo, los próximos tres cubren las funciones integradas en SQL. El primero se enfoca en tres categorías: operaciones aritméticas, concatenación de cadenas y funciones de fecha — todas son expresiones que normalmente pondrás en la lista de columnas de un SELECT.
El conjunto de datos es la tabla staff (10 filas: id / name / birthday / city / salary), cargada automáticamente desde un CSV. A lo largo de cuatro ejercicios prácticos, harás cálculos monetarios con salary, construirás etiquetas a partir de name y city, y formatearás fechas desde birthday.
Operadores aritméticos — +, -, *, /, %
Para cálculos sobre columnas numéricas, dispones de los 5 operadores aritméticos + - * / %. SQL te permite escribir expresiones directamente en la lista de columnas del SELECT, así que puedes tomar un valor de una tabla y devolver su resultado calculado como columna separada. Añadir AS alias da nombre a la columna resultado, lo que facilita mostrarla o consumirla en código posterior.
La división / se comporta diferente según la base de datos: en divisiones solo entre enteros, algunas bases (PostgreSQL / SQL Server) devuelven un resultado entero, mientras que otras (MySQL / la consola de este curso = SQLite) devuelven automáticamente un decimal.
-- 1) Cálculos simples sin tabla
SELECT 1 + 1; -- 2
SELECT 10 - 3; -- 7
SELECT 3 * 4; -- 12
SELECT 10.0 / 3; -- 3.333...
SELECT 10 % 3; -- 1
-- 2) Cálculo usando una columna (salario anual tras un aumento del 10%)
SELECT name, salary, salary * 1.1 AS next_year_salary
FROM staff;
-- 3) Calcula el salario mensual (anual / 12)
SELECT name, salary / 12 AS monthly_salary FROM staff;
+ - * / % tienen el mismo significado que en la mayoría de los lenguajes de programación.Concatenación de cadenas — `||` y `CONCAT()`
Unir varias cadenas en una se llama concatenación. Hay dos formas de escribirlo: la consola de este curso (SQLite), PostgreSQL, Oracle y SQL Server usan el operador `||` (dos barras verticales), mientras que MySQL usa la función `CONCAT()`. SQLite en realidad soporta ambos || y CONCAT(), así que este artículo se apoya en CONCAT() por ser más portable.
Introduciendo un separador (': ' o ' / ') entre los valores, puedes colapsar name y city en una sola columna legible como «Alice Tanaka / Tokyo». Es una herramienta básica para informes y exportaciones CSV donde quieres «varias columnas fusionadas en una».
-- 1) El operador || (SQLite / PostgreSQL / Oracle)
SELECT name || ' (' || city || ')' AS label FROM staff;
-- 2) La función CONCAT (MySQL / SQLite 3.40+ / PostgreSQL)
SELECT CONCAT(name, ' (', city, ')') AS label FROM staff;
-- Ambos devuelven el mismo resultado
-- → Alice Tanaka (Tokyo) / Bob Suzuki (Osaka) / ...
`||` vs. `CONCAT()` — cuál elegir
Para portabilidad, `CONCAT()` es la opción más segura. Funciona en SQLite, MySQL, PostgreSQL, SQL Server (2012+) y Oracle. || es el estándar SQL, pero en MySQL significa por defecto OR lógico, así que si la producción podría ser MySQL, elegir CONCAT() significa no tener que reescribir nada.
El manejo de NULL también difiere: NULL || 'A' devuelve NULL con el operador ||. CONCAT(NULL, 'A') devuelve una cadena vacía en MySQL pero NULL en PostgreSQL — el comportamiento varía. Cuando NULL puede colarse en tus entradas, envuélvelas con COALESCE(columna, '') para convertir NULL a cadena vacía antes de concatenar (COALESCE se cubre en el tercer artículo de esta serie).
Funciones de fecha — marca de tiempo actual y formateo
Para cosas como «poner la hora actual a un registro nuevo» o «sacar solo el año de un cumpleaños», usas las funciones de fecha. Las funciones de fecha son una de las categorías donde los nombres de funciones y la sintaxis varían más entre bases de datos — la consola de este curso (SQLite) y MySQL las llaman bastante distinto.
Este curso usa datetime('now') / date('now') / strftime('formato', valor) de SQLite para los ejercicios, con NOW() / CURDATE() / DATE_FORMAT(valor, 'formato') de MySQL mostrados en paralelo en la tabla comparativa más abajo. Las cadenas de formato ('%Y' para año, '%m' para mes, '%d' para día, etc.) son iguales en ambas bases, así que al menos los especificadores de formato se transfieren directamente.
-- Cómo escribirlo en la consola de este curso (SQLite)
-- 1) Marca de tiempo actual / fecha actual
SELECT datetime('now') AS current_dt, date('now') AS current_d;
-- 2) Especificador de formato (solo año / solo año-mes)
SELECT strftime('%Y', '1990-04-15') AS year_only; -- '1990'
SELECT strftime('%Y-%m', '1990-04-15') AS year_month; -- '1990-04'
-- 3) Formato aplicado a una columna
SELECT name, strftime('%Y', birthday) AS birth_year FROM staff;
-- Referencia: lo mismo en MySQL
-- SELECT NOW(), CURDATE();
-- SELECT DATE_FORMAT(birthday, '%Y') FROM staff;
| Propósito | Consola de este curso (SQLite) | MySQL |
|---|---|---|
| Marca de tiempo actual | datetime('now') | NOW() |
| Fecha actual | date('now') | CURDATE() |
| Extraer solo el año | strftime('%Y', d) | DATE_FORMAT(d, '%Y') |
| Formato personalizado | strftime('%Y-%m-%d', d) | DATE_FORMAT(d, '%Y-%m-%d') |
Verificación de conocimientos
Responde cada pregunta una a una.
Pregunta 2En la consola de este curso, ¿cuál es la forma correcta de combinar name y city en una sola columna como Alice Tanaka (Tokyo)?
Pregunta 3En la consola de este curso (SQLite), ¿cuál es la forma correcta de sacar solo el año de 4 dígitos de una columna birthday?