Tema SQL
ELT() (MySQL / MariaDB)
Devuelve el argumento de la lista situado en la posición indicada por el primer argumento (1-based). Es la inversa lógica de FIELD para construir valores a partir de un índice.
Descripción
ELT(n, s1, s2, s3, …) selecciona la cadena n-ésima entre s1, s2, … Si n está fuera de rango, es menor que 1 o es NULL, el resultado es NULL. Útil en demos y transformaciones puntuales; en modelos de datos serios suele preferirse una tabla de códigos o CASE explícito. Combinada con columnas numéricas que representan categorías pequeñas, puede mapear a etiquetas sin JOIN, a costa de ocultar la semántica en la consulta. Documenta bien cualquier uso para que futuros cambios no rompan el índice 1-based.
Estructura general
Forma habitual de la sentencia: orden de cláusulas, qué parte filtra, agrupa o proyecta columnas, y qué devuelve el motor. Cópiala como plantilla y sustituye nombres por tus tablas reales.
ELT(índice, cadena1 [, cadena2 ...])
Componentes
Cada componente tiene un papel concreto en la ejecución lógica de la sentencia. Léelos en orden: así entiendes qué puedes omitir, qué es obligatorio y qué expresiones son válidas en cada sitio según tu motor.
- Índice
- Entero positivo; 1 devuelve el primer string tras el índice.
- Lista de cadenas
- Valores constantes en la llamada; no sustituye un array dinámico SQL.
- Alternativa
- CASE WHEN índice=1 THEN … es portable.
Ejemplos
Ejemplo 1
SELECT ELT(2, 'rojo', 'verde', 'azul') AS color;
-- verde
SELECT ELT(dia_semana, 'Lun', 'Mar', 'Mié', 'Jue', 'Vie', 'Sáb', 'Dom') AS nombre_dia
FROM calendario;
Ejemplo 2
SELECT id, ELT(MONTH(fecha), 'Ene','Feb','Mar','Abr','May','Jun','Jul','Ago','Sep','Oct','Nov','Dic') AS mes_nom
FROM eventos;
Los ejemplos son ilustrativos. En producción usa consultas parametrizadas (prepared statements), revisa índices y aplica el principio de menor privilegio en cuentas de base de datos.