Aprende leyendo en orden

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.

Antes de meterte en los ejercicios, verifiquemos las definiciones de columnas y los datos de muestra de la tabla staff.

① Ejecuta PRAGMA table_info(staff); para ver los nombres de columnas, tipos y clave primaria.

② Ejecuta SELECT * FROM staff LIMIT 5; para previsualizar las primeras 5 filas.

Editor SQL

Ejecutar una consulta para ver el resultado

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;
Guía rápida de operadores aritméticos
OperadorSignificadoEjemplo+Sumasalary + 100000-Restasalary - 100000*Multiplicaciónsalary * 1.1/Divisiónsalary / 12%Módulo(resto)10 % 3 → 1
Los principales operadores aritméticos integrados en SQL. Los 5 operadores + - * / % tienen el mismo significado que en la mayoría de los lenguajes de programación.

Imagina una simulación salarial: mostrar «el salario anual de cada empleado si recibiera un aumento del 10%». (Si lo ejecutas correctamente, aparecerá una explicación.)

① Desde la tabla staff, extrae name, salary y salary * 1.1 con el alias next_year_salary — 3 columnas en total.

② Ordena por next_year_salary descendente.

③ Verifica que el resultado tiene 10 filas y empieza con Frank Tanaka 7,200,000 / 7,920,000.

Editor SQL

Ejecutar una consulta para ver el resultado

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).

Imagina construir una etiqueta para tarjetas de empleados: «nombre seguido de espacio y ciudad entre paréntesis».

① Desde la tabla staff, extrae las columnas originales name y city más `CONCAT(name, ' (', city, ')')` con el alias `label`.

② Verifica que el resultado tiene 10 filas y la columna label contiene cadenas como «Alice Tanaka (Tokyo)» / «Bob Suzuki (Osaka)».

Editor SQL

Ejecutar una consulta para ver el resultado

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ósitoConsola de este curso (SQLite)MySQL
Marca de tiempo actualdatetime('now')NOW()
Fecha actualdate('now')CURDATE()
Extraer solo el añostrftime('%Y', d)DATE_FORMAT(d, '%Y')
Formato personalizadostrftime('%Y-%m-%d', d)DATE_FORMAT(d, '%Y-%m-%d')

Saquemos la marca de tiempo actual y la fecha actual de la consola de este curso. Con ejecutarlo basta — sin verificación exacta.

① Saca datetime('now') con el alias current_dt y date('now') con el alias current_d.

② Verifica que el resultado es 1 fila × 2 columnas, con current_dt mostrando la marca de tiempo actual en formato «YYYY-MM-DD HH:MM:SS» y current_d mostrando la fecha actual en formato «YYYY-MM-DD».

Editor SQL

Ejecutar una consulta para ver el resultado

Imagina una lista de empleados que necesita una columna «año de nacimiento» separada.

① Desde la tabla staff, extrae name, birthday y `strftime('%Y', birthday)` con el alias `birth_year` — 3 columnas en total.

② Verifica que el resultado tiene 10 filas. Para Alice Tanaka, deberías ver birthday=1990-04-15 y birth_year='1990' — solo el año termina en la nueva columna.

Editor SQL

Ejecutar una consulta para ver el resultado

Imagina una petición: «muestra los empleados jóvenes (nacidos en los años 90) por orden de nacimiento».

① Desde la tabla staff, extrae name, birthday y strftime('%Y', birthday) AS birth_year.

② Filtra a las filas donde birth_year esté entre '1990' y '1999' inclusive (usa BETWEEN).

③ Ordena por birthday ascendente (primero los más antiguos) y queda solo con las 3 primeras filas.

④ Verifica que el resultado es 3 filas: Alice 1990-04-15 / Grace 1991-05-25 / Carol 1992-11-03.

Editor SQL

Ejecutar una consulta para ver el resultado
QUIZ

Verificación de conocimientos

Responde cada pregunta una a una.

Pregunta 1¿Cuál de los siguientes es el resultado correcto de SELECT 10 % 3;?

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?