Sabemos la secuencia de la teoría. ¿Pero cómo manejamos una secuencia CASE con un tipo de dato ENUM como value?
CASE value WHEN [compare-value] THEN result [WHEN [compare-value] THEN result ...] [ELSE result] END, CASE WHEN [condition] THEN result [WHEN [condition]THEN result ...] [ELSE result] END
Adjunto un ejemplo de secuencia CASE en MySQL, ya que en su día cuando busqué, no encontré un ejemplo claro.
Primero vamos a suponer que tenemos la siguiente base de datos en MySQL centrándonos en los datos que importan: PK y ENUM.
catalog_filter_id —> la clave (PK)
article_status —> tipo ENUM.
El resto son date, string, etc.
‘article_status’ que es de tipo ENUM está definido de la siguiente forma:
ENUM {‘all’,’operative’,’no_operative’}
Al ser un enum, article_status puede ser 1, 2, 3.
Si en lugar de 1, 2, 3 como resultado de la búsqueda queremos que devuelva ‘Todos’, ‘En vigor’ y ‘Sin vigor’:
«En caso de ser 1 muestra ‘Todos’,
En caso de ser 2 muestra ‘En vigor’,
En caso de ser 3 muestra ‘Sin vigor'»
Entonces la secuencia con CASE queda:
SELECT catalog_filter_id, family_from, family_to, article_from, article_to, case article_status when 1 then 'Todos' when 2 then 'En vigor' when 3 then 'Sin vigor' end as article_status, bu.name FROM catalogs_filters cf left join business_units bu on cf.business_unit_id=bu.business_unit_id WHERE cf.catalog_id = ? and cf.deleted_date is null
Por si no se ve bien en la misma línea tenemos:
case article_status when 1 then 'Todos' when 2 then 'En vigor' when 3 then 'Sin vigor' end as article_status
¿Qué conseguimos?
Que se muestren las cadenas ‘Todos’, ‘En vigor’ y ‘Sin vigor’ del CASE en lugar de los números ‘1’, ‘2’, ‘3’ de article_status.
Conclusión: Los ejemplos me liaban si la sentencia ‘case’ va con ‘end’, hay ‘;’ etc. Con este ejemplo si lo utilizas parecido… tiene que funcionar 😉
Fedback, comentarios, pegas, mejoras, compartir y vivir are welcome
Gracias!!