[SQL 04] Funciones de texto, número, fecha y NULL
- Transformar textos:
UPPER, LOWER, LENGTH, SUBSTR, INSTR, TRIM, REPLACE. - Redondear y operar números:
ROUND, ABS, división entera y módulo. - Extraer partes de una fecha y calcular antigüedades con
strftimeyjulianday. - Reemplazar nulos con
COALESCE / IFNULLy convertir tipos conCAST.
Las funciones de fila (escalares) reciben valores de una fila y devuelven un valor por
fila. Se pueden usar en el SELECT, en el WHERE y en el ORDER BY. A diferencia de
las funciones de agregación (próxima práctica), no reducen la cantidad de filas.
Cada motor tiene su propio catálogo, pero las ideas son las mismas. Aquí usamos las de SQLite y verás su equivalente en MySQL y Oracle.
Ojo con las fechas: SQLite guarda las fechas como texto ISO ('2023-05-17') y las manipula con
date(), strftime() y julianday(). En Oracle y MySQL existen tipos DATE
nativos con funciones como EXTRACT, YEAR() o MONTHS_BETWEEN.
SELECT UPPER(texto), SUBSTR(texto, inicio, largo),
ROUND(numero, decimales),
strftime('%Y', fecha),
COALESCE(valor_posible_nulo, valor_por_defecto)
FROM tabla;%m mes, %d día). Oracle: EXTRACT(YEAR FROM f).IFNULL (MySQL/SQLite), NVL (Oracle).CAST(3.9 AS INTEGER) = 3.strftime('%Y', hire_date) · IFNULL(x, 0) · SUBSTRYEAR(hire_date) · IFNULL(x, 0) · SUBSTRING · CHAR_LENGTHEXTRACT(YEAR FROM hire_date) · NVL(x, 0) · SUBSTR1 · Ejemplos guiados · ejecuta y modifica cada bloque
+1.555.648.2542: reemplazamos los puntos por guiones y buscamos la posición del primer punto.%.julianday, dividida por 365.25 y truncada con CAST. Usamos una fecha de corte fija para que el resultado no cambie con el tiempo.COALESCE devuelve el primer valor no nulo: los sin comisión muestran 0 y el salario total se puede calcular sin perder filas.⚠ Errores frecuentes
- Operar con un NULL anula todo:
salary * commission_pctes NULL para quien no tiene comisión. UsaCOALESCE. - División entera: en SQLite
7 / 2= 3. Para decimales usa7 / 2.0oCAST(x AS REAL). SUBSTRcuenta desde 1, no desde 0.- Usar
date('now')en un informe que debe ser reproducible: el resultado cambia cada día. Usa una fecha de corte. - Comparar fechas en formatos distintos (
'17/05/2023'vs'2023-05-17'): guarda siempre en ISO.
2 · Retos con corrección automática
Escribe tu solución y pulsa comprobar (Ctrl + Enter). Tu consulta y la solución se ejecutan en bases limpias y se comparan los resultados: no importan los nombres de las columnas, sí los datos (y el orden, cuando el reto lo pide). Si te atascas, usa la pista o mira el resultado esperado.
3 · Preguntas tipo solemne
SUBSTR('QueryLab', 1, 5)?salary * commission_pct para un empleado sin comisión?7 / 2?7 / 2.0 da 3.5.