Está en la página 1de 2

DECODE en db2

Función escalar DECODE


.---------------------------------------.
V |
>>-DECODE--(--expresión1----,--expresión2--,--expresión-resultado-+--
+-------------------+--)-><

'-,--expresión-else-'

El esquema es SYSIBM.

La función DECODE compara cada expresión2 con la expresión1. Si expresión1 es igual


a expresión2, o expresión1 y expresión2 son nulas, se devuelve el valor de la expresión-
resultado siguiente. Si ninguna expresión2coincide con expresión1, se devuelve el valor
de expresión-else; de lo contrario, se devuelve un valor nulo.

La función DECODE es similar a la expresión CASE excepto en el manejo de los valores nulos:
 Un valor nulo de expresión1 coincidirá con un valor nulo correspondiente
de expresión2.
 Si se utiliza la palabra clave NULL como argumento de la función DECODE, se deberá
convertir en un tipo de datos apropiado.
Las normas para determinar el tipo de resultado de una expresión DECODE se basan en la
expresión CASE correspondiente.

Ejemplos:

La expresión DECODE:
DECODE (c1, 7, 'a', 6, 'b', 'c')
obtiene el mismo resultado que la expresión CASE siguiente:
CASE c1
WHEN 7 THEN 'a'
WHEN 6 THEN 'b'
ELSE 'c'
END
De forma similar, la expresión DECODE:
DECODE (c1, var1, 'a', var2, 'b')
donde los valores de c1, var1 y var2 pueden ser valores nulos, obtiene el mismo resultado que la
expresión CASE siguiente:
CASE
WHEN c1 = var1 OR (c1 IS NULL AND var1 IS NULL) THEN 'a'
WHEN c1 = var2 OR (c1 IS NULL AND var2 IS NULL) THEN 'b'
ELSE NULL
END
Examine también la consulta siguiente:
SELECT ID, DECODE(STATUS, 'A', 'Accepted',
'D', 'Denied',
CAST(NULL AS VARCHAR(1)), 'Unknown',
'Other')
FROM CONTRACTS
A continuación se muestra la misma sentencia utilizando una expresión CASE:
SELECT ID,
CASE
WHEN STATUS = 'A' THEN 'Accepted'
WHEN STATUS = 'D' THEN 'Denied'
WHEN STATUS IS NULL THEN 'Unknown'
ELSE 'Other'
END
FROM CONTRACTS

También podría gustarte