MainframeSupports
tip uge 16/2016:

Er du vild med at bruge CASE i SQL, men er du samtidig lidt træt af, at der skal skrives ret meget for at lave selv de mest simple oversættelser, så er DECODE lige noget for. Hvor CASE er en slags expression, så er DECODE en ægte builtin function. Lad mig vise dig et eksempel:

SELECT CASE HOUR(CURRENT TIME) WHEN 12 THEN 'LUNCH' WHEN 16 THEN 'HOME' ELSE 'WORK' END
     , DECODE(HOUR(CURRENT TIME), 12, 'LUNCH', 16, 'HOME', 'WORK')
FROM SYSIBM.SYSDUMMY1

Første parameter til DECODE er den expression, der skal oversættes. Anden og tredie parameter er det første par af oversættelse fra og til. Efter dette første par af oversættelse fra og til kan der følge et vilkårligt antal fra og til par af oversættelser. Til sidst kan der angives en parameter, der oversætter alle ikke oversatte værdier til denne værdi, ligesom den værdi, der står efter ELSE i en CASE. Og præcis som i en CASE, hvor ELSE mangler, så vil DECODE returnere NULL, hvis den afsluttende parameter er udeladt.

Begrænsningen i DECODE i forhold til CASE er, at CASE WHEN predicate ikke kan oversættes til en DECODE, hvis predicate ikke er noget med expression = expression. I disse tilfælde er du fortsat nødt til at anvende gode gamle CASE. Som det fremgår af eksemplet, så er kortere at skrive DECODE, især hvis der er mange forskellige værdier, der skal oversættes.

Forrige danske tip        Last tip in english        Tip oversigten