Tema SQL
CHOOSE() (SQL Server)
Elige el valor por índice 1-based (CHOOSE(n, v1, v2, …)). Paralelo a ELT() en MySQL; fuera de rango suele dar NULL.
Descripción
CHOOSE ( índice , valor1 , valor2 , … ) selecciona el valor n-ésimo. Si el índice está fuera de rango o es NULL, el resultado es NULL. Los tipos de los valores deben ser compatibles o el motor convertirá. No sustituye tablas de catálogo: para muchos códigos numéricos es más mantenible un JOIN a una tabla de referencia. CHOOSE existe desde SQL Server 2012. ELT(n, …) en MySQL usa la misma idea de índice 1-based tras el primer argumento.
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.
CHOOSE(índice, valor1 [, valor2 ...])
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 1-based
- 1 devuelve valor1; 0 o fuera de rango → NULL en casos típicos.
- MySQL
- ELT(índice, s1, s2, …) análogo.
- Legibilidad
- CASE WHEN código = 1 THEN … puede ser más explícito para equipos nuevos.
Ejemplos
Ejemplo 1
SELECT CHOOSE(2, N'rojo', N'verde', N'azul') AS color;
-- verde
SELECT CHOOSE(DATEPART(WEEKDAY, fecha), N'Dom', N'Lun', N'Mar', N'Mié', N'Jue', N'Vie', N'Sáb') AS dia_nom
FROM eventos;
Ejemplo 2
SELECT CHOOSE(tipo_envio, N'local', N'nacional', N'internacional') AS etiqueta
FROM pedidos;
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.