sql >> Base de Datos >  >> RDS >> Database

¿Cuál es el uso de la función DECODE en SQL?

En Oracle, la función DECODE nos permite agregar lógica de procedimiento if-then-else a la consulta. En este blog, intentaremos obtener una comprensión completa de la función DECODE en SQL. Estaremos aprendiendo las diversas formas de usar DECODE, su sintaxis y entenderlo con ejemplos. Quédate con nosotros hasta el final del blog.

Los temas que se van a tratar son:

  • ¿Qué es la función DECODE en SQL?
  • La sintaxis de la función DECODE
  • Ejemplos de la función DECODE

Comencemos uno por uno.

¿Qué es la función DECODE en SQL?

En Oracle, la función DECODE nos permite agregar lógica de procedimiento if-then-else a la consulta. DECODE compara la expresión con cada valor de búsqueda uno por uno. Si la expresión es igual a una búsqueda, Oracle Database devuelve el resultado correspondiente. Si no se encuentra una coincidencia, se devuelve el valor predeterminado. Si se omite el valor predeterminado, Oracle devuelve nulo.

El tipo de argumentos puede ser:

  • Tipos numéricos (NÚMERO, BINARY_FLOAT o BINARY_DOUBLE)

Si el primer par de resultados de búsqueda es numérico, Oracle compara todas las expresiones de resultados de búsqueda y la primera expresión para encontrar el argumento con la precedencia numérica más alta, convierte los argumentos restantes implícitamente a ese tipo de datos y devuelve ese tipo de datos en particular.

  • Tipos de personajes

Si expr y search son datos de caracteres, Oracle los compara utilizando semántica de comparación sin relleno. expr, search y el resultado puede ser cualquiera de los tipos de datos CHAR, VARCHAR2, NCHAR o NVARCHAR2. La cadena devuelta es del tipo de datos VARCHAR2 y está en el mismo conjunto de caracteres que el primer parámetro de resultado.

Oracle Database utiliza evaluación de cortocircuito. Evalúa los valores de búsqueda solo antes de compararlos con la expresión en lugar de evaluar todos los valores de búsqueda. Si una búsqueda anterior es igual a expresión, la evaluación finaliza.

Oracle convierte los valores expr y de búsqueda al tipo de datos del primer valor de búsqueda antes de la comparación. Y convierte el valor devuelto al mismo tipo de datos que el primer resultado.

Ejemplo: Si el primer resultado tiene el tipo de datos CHAR o si el primer resultado es nulo, Oracle convierte el valor devuelto al tipo de datos VARCHAR2.

Oracle considera que dos valores nulos son equivalentes. Si expr es nulo, Oracle devuelve NULL, que es el resultado de la primera búsqueda.

El número máximo de componentes que puede contener la función DECODE es 255. Esto incluye los argumentos de expresión, búsqueda y resultado.

La función DECODE se puede utilizar en las siguientes versiones de Oracle o PLSQL:

Oráculo 12c, Oráculo 11g, Oráculo 10g, Oráculo 9i

Un ejemplo básico:

En el siguiente ejemplo, la función Oracle DECODE() compara el primer argumento con el segundo argumento. Dado que son iguales, la función devuelve el segundo argumento, que es la cadena 'Uno'.

SELECT
DECODE(1, 1, 'One')
FROM
dual;

La sintaxis de la función DECODE es:

DECODE(expresión, búsqueda, resultado [, búsqueda, resultado]… [, predeterminado (opcional)])

expresión

El valor que se tiene que comparar. Se convierte automáticamente al tipo de datos del primer valor de búsqueda antes de comparar.

buscar

El valor que se compara con la expresión.

resultado

El valor que se devuelve, si expresión=búsqueda.

predeterminado

Si no hay coincidencias, la función DECODE devolverá el valor predeterminado y si se omite el valor predeterminado, la función devolverá NULL.

Ejemplos de la función DECODE

  • La función DECODE se puede usar en Oracle/PLSQL de la siguiente manera
SELECT bank_name,
DECODE(bank_id, 001, 'SBI',
                    002, 'ICICI',
                    003, ‘Dena',
                    'Gateway') result
FROM banks;

Declaración IF-THEN-ELSE equivalente a la declaración DECODE() anterior:

IF bank_id = 001 THEN
   result := 'SBI';

ELSIF bank_id = 002 THEN
   result := 'ICICI';

ELSIF bank_id = 003 THEN
   result := 'Dena';

ELSE
   result := 'Gateway';

END IF;

La función DECODE comparará cada valor de bank_id, uno por uno.

  • Función DECODE para comparar dos fechas (date1 y date2), donde, si date1> date2, la función DECODE debe devolver date2. De lo contrario, la función DECODE debería devolver date1
DECODE((date1 - date2) - ABS(date1 - date2), 0, date2, date1)

La siguiente fórmula es igual a 0, si fecha1 es mayor que fecha2:

(date1 - date2) - ABS(date1 - date2)

El ejemplo de fecha que se ilustra arriba también se puede modificar de la siguiente manera:

DECODE(SIGN(date1-date2), 1, date2, date1)
  • Instrucción DECODE que devolverá lo siguiente:

Si hours_of_work <1, devuelva 0.04
Si hours_of_work>=1 y <5, devuelva 0.04
Si hours_of_work> 5, devuelve 0,06

Aquí, debe crear una fórmula que evalúe a un solo número para cada uno de sus rangos.

SELECT emp_name,
DECODE(TRUNC (( hours_of_work + 3) / 4), 0, 0.04,
                                          1, 0.04,
                                          0.06) as perc_value
FROM employees;

Todo esto se trata de la función DECODE, a estas alturas ya debe tener una idea clara de cómo funciona y cuán útil es esta función. Ahora, intente usarlos siempre que se requiera cualquier lógica IF-ELSE mientras trabaja en SQL. Espero que el artículo te haya ayudado con los conceptos de la instrucción DECODE.

Si desea obtener más información sobre MySQL y conocer esta base de datos relacional de código abierto, consulte nuestra Capacitación para la certificación de MySQL DBA que viene con capacitación en vivo dirigida por un instructor y experiencia en proyectos de la vida real. Esta capacitación lo ayudará a comprender MySQL en profundidad y lo ayudará a dominar el tema.

¿Tiene alguna pregunta para nosotros? Menciónelo en la sección de comentarios de ”DECODE in SQL” y me pondré en contacto contigo.