queryLab · software_de_entrenamiento en espera
Nivel 1 · Básico · SQL · funciones

[SQL 04] Funciones de texto, número, fecha y NULL

UPPER, SUBSTR, REPLACE, ROUND, strftime, COALESCE, CAST… una fila a la vez.
0 / 7 retos resueltos 📘 SQL COMANDOS · funciones de texto, CAST y fechas
Al terminar esta práctica podrás…
  • 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 strftime y julianday.
  • Reemplazar nulos con COALESCE / IFNULL y convertir tipos con CAST.

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.

Sintaxis
SELECT UPPER(texto), SUBSTR(texto, inicio, largo),
       ROUND(numero, decimales),
       strftime('%Y', fecha),
       COALESCE(valor_posible_nulo, valor_por_defecto)
FROM tabla;
UPPER / LOWER
Mayúsculas / minúsculas.
SUBSTR(t, i, n)
Extrae n caracteres desde la posición i (base 1).
LENGTH · INSTR
Largo de un texto · posición de una subcadena.
TRIM · REPLACE
Quita espacios · reemplaza una subcadena por otra.
ROUND(x, d)
Redondea a d decimales.
strftime('%Y', f)
Año (%m mes, %d día). Oracle: EXTRACT(YEAR FROM f).
julianday(a) - julianday(b)
Días entre dos fechas.
COALESCE(a, b, …)
Primer valor no nulo. IFNULL (MySQL/SQLite), NVL (Oracle).
CAST(x AS tipo)
Convierte tipos: CAST(3.9 AS INTEGER) = 3.
SQLite
strftime('%Y', hire_date) · IFNULL(x, 0) · SUBSTR
MySQL
YEAR(hire_date) · IFNULL(x, 0) · SUBSTRING · CHAR_LENGTH
Oracle
EXTRACT(YEAR FROM hire_date) · NVL(x, 0) · SUBSTR

1 · Ejemplos guiados · ejecuta y modifica cada bloque

01Funciones de texto
Cambiamos mayúsculas, medimos el largo y extraemos las 3 primeras letras del apellido.
sql-funciones-fila.sql
Presiona «ejecutar» para ver el resultado.
02Reemplazar y buscar dentro de un texto
Los teléfonos tienen formato +1.555.648.2542: reemplazamos los puntos por guiones y buscamos la posición del primer punto.
sql-funciones-fila.sql
Presiona «ejecutar» para ver el resultado.
03Números: redondeo, división y módulo
Salario por hora (160 h/mes) redondeado, y paridad del id con el operador %.
sql-funciones-fila.sql
Presiona «ejecutar» para ver el resultado.
04Partes de una fecha
Año, mes y nombre corto del día de contratación.
sql-funciones-fila.sql
Presiona «ejecutar» para ver el resultado.
05Antigüedad en años
Diferencia en días con julianday, dividida por 365.25 y truncada con CAST. Usamos una fecha de corte fija para que el resultado no cambie con el tiempo.
sql-funciones-fila.sql
Presiona «ejecutar» para ver el resultado.
06Reemplazar nulos
COALESCE devuelve el primer valor no nulo: los sin comisión muestran 0 y el salario total se puede calcular sin perder filas.
sql-funciones-fila.sql
Presiona «ejecutar» para ver el resultado.

⚠ Errores frecuentes

  • Operar con un NULL anula todo: salary * commission_pct es NULL para quien no tiene comisión. Usa COALESCE.
  • División entera: en SQLite 7 / 2 = 3. Para decimales usa 7 / 2.0 o CAST(x AS REAL).
  • SUBSTR cuenta 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

1. ¿Cuánto vale SUBSTR('QueryLab', 1, 5)?
2. ¿Qué devuelve salary * commission_pct para un empleado sin comisión?
3. En Oracle, ¿qué función reemplaza un NULL por un valor?
4. En SQLite, ¿cuánto vale 7 / 2?