La fonction CASE calcule une nouvelle valeur à partir d'une ou plusieurs valeurs basées sur des conditions. Une fois que la condition d'un WHEN est remplie, la valeur correspondante dans le THEN est générée, et le reste des WHEN et ELSE sera ignoré.
case
when <condition> then <output>
when <condition> then <output>
...
else <otherOutput>
end
case <expression>
when <value> then <output>
when <value> then <output>
...
else <otherOutput>
end
est la valeur à générer lorsqu'aucune des conditions n'est remplie ; une valeur par défaut sera générée en l'absence de ELSE, qui a le même format de données que
Les mots-clés CASE, WHEN, THEN, ELSE, END ne sont pas sensibles à la casse.
Les instructions conditionnelles (
WHEN
) sont exécutées de haut en bas en séquence. Lorsqu'une condition est remplie, la sortie correspondante (THEN
) est exécutée, et les instructions conditionnelles restantes ne sont pas exécutées.
Utilisation Courante
Exemple : Calculer le jour de la semaine du jour de paie prévu (15e) de chaque mois en 2023
uncollect ["2023-1-15","2023-2-15","2023-3-15","2023-4-15","2023-5-15","2023-6-15","2023-7-15","2023-8-15","2023-9-15","2023-10-15","2023-11-15","2023-12-15"] as payday
return CASE dayOfWeek(payday)
when 1 then "Sunday"
when 2 then "Monday"
when 3 then "Tuesday"
when 4 then "Wednesday"
when 5 then "Thursday"
when 6 then "Friday"
when 7 then "Saturday"
END
Sunday
Wednesday
Wednesday
Saturday
Monday
Thursday
Saturday
Tuesday
Friday
Sunday
Wednesday
Friday
Exemple : Calculer le jour de paie réel de chaque mois en 2023, sachant qu'un jour de paie prévu pendant le week-end doit être reporté au lundi suivant
uncollect ["2023-1-15","2023-2-15","2023-3-15","2023-4-15","2023-5-15","2023-6-15","2023-7-15","2023-8-15","2023-9-15","2023-10-15","2023-11-15","2023-12-15"] as payday
return CASE dayOfWeek(payday)
when 1 then dateAdd(payday, 1, "day")
when 7 then dateAdd(payday, 2, "day")
else dateAdd(payday, 0, "day")
END
Analyse : La fonction dateAdd() dans WHEN décale le payday prévu du week-end au lundi suivant ; ELSE indique les payday qui sont pendant les jours ouvrables, mais nécessite encore que le payday soit 0-décalé par dateAdd(), la raison étant de garder le format des données de sortie de ELSE cohérent avec WHEN.
2023-01-16 00:00:00
2023-02-15 00:00:00
2023-03-15 00:00:00
2023-04-17 00:00:00
2023-05-15 00:00:00
2023-06-15 00:00:00
2023-07-17 00:00:00
2023-08-15 00:00:00
2023-09-15 00:00:00
2023-10-16 00:00:00
2023-11-15 00:00:00
2023-12-15 00:00:00