Database
 sql >> Base de données >  >> RDS >> Database

A quoi sert la fonction DECODE en SQL ?

Dans Oracle, la fonction DECODE nous permet d'ajouter une logique procédurale if-then-else à la requête. Dans ce blog, nous allons essayer d'avoir une compréhension complète de la fonction DECODE en SQL. Nous allons apprendre les différentes façons d'utiliser DECODE, sa syntaxe et le comprendre avec des exemples. Restez avec nous jusqu'à la fin du blog.

Les sujets qui seront abordés sont :

  • Qu'est-ce que la fonction DECODE en SQL ?
  • La syntaxe de la fonction DECODE
  • Exemples de fonction DECODE

Commençons un par un.

Qu'est-ce que la fonction DECODE en SQL ?

Dans Oracle, la fonction DECODE nous permet d'ajouter une logique procédurale if-then-else à la requête. DECODE compare l'expression à chaque valeur de recherche une par une. Si expression est égale à une recherche, le résultat correspondant est renvoyé par la base de données Oracle. Si aucune correspondance n'est trouvée, la valeur par défaut est renvoyée. Si default est omis, alors Oracle renvoie null.

Le type d'arguments peut être :

  • Types numériques (NUMBER, BINARY_FLOAT ou BINARY_DOUBLE)

Si la première paire de résultats de recherche est numérique, Oracle compare toutes les expressions de résultats de recherche et la première expr pour trouver l'argument avec la priorité numérique la plus élevée, convertit implicitement les arguments restants en ce type de données et renvoie ce type de données particulier.

  • Types de caractères

Si expr et search sont des données textuelles, Oracle les compare à l'aide d'une sémantique de comparaison non rembourrée. expr, search et le résultat peut être l'un des types de données CHAR, VARCHAR2, NCHAR ou NVARCHAR2. La chaîne renvoyée est de type de données VARCHAR2 et se trouve dans le même jeu de caractères que le premier paramètre de résultat.

Oracle Database utilise l'évaluation des courts-circuits. Il évalue les valeurs de recherche uniquement avant de les comparer à l'expression plutôt que d'évaluer toutes les valeurs de recherche. Si une recherche précédente est égale à expression, l'évaluation est terminée.

Oracle convertit les valeurs d'expression et de recherche dans le type de données de la première valeur de recherche avant la comparaison. Et convertit la valeur de retour dans le même type de données que le premier résultat.

Exemple : Si le premier résultat a le type de données CHAR ou si le premier résultat est nul, alors Oracle convertit la valeur de retour en type de données VARCHAR2.

Deux valeurs nulles sont considérées comme équivalentes par Oracle. Si expr est null, alors Oracle renvoie NULL qui est le résultat de la première recherche.

Le nombre maximal de composants pouvant être contenus dans la fonction DECODE est de 255. Cela inclut les arguments d'expression, de recherche et de résultat.

La fonction DECODE peut être utilisée dans les versions suivantes d'Oracle ou de PLSQL :

Oracle 12c, Oracle 11g, Oracle 10g, Oracle 9i

Un exemple de base :

Dans l'exemple suivant, la fonction Oracle DECODE() compare le premier argument au deuxième argument. Puisqu'ils sont égaux, la fonction renvoie le deuxième argument qui est la chaîne "Un".

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

La syntaxe de la fonction DECODE est :

DECODE(expression , recherche , résultat [, recherche , résultat]… [, défaut (facultatif)])

expression

La valeur à comparer. Il est automatiquement converti dans le type de données de la première valeur de recherche avant la comparaison.

rechercher

La valeur qui est comparée à l'expression.

résultat

La valeur renvoyée, si expression=search.

par défaut

S'il n'y a pas de correspondance, la fonction DECODE renverra la valeur par défaut et si la valeur par défaut est omise, la fonction renverra NULL.

Exemples de fonction DECODE

  • La fonction DECODE peut être utilisée dans Oracle/PLSQL comme suit
SELECT bank_name,
DECODE(bank_id, 001, 'SBI',
                    002, 'ICICI',
                    003, ‘Dena',
                    'Gateway') result
FROM banks;

Instruction IF-THEN-ELSE équivalente pour l'instruction DECODE() ci-dessus :

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 fonction DECODE comparera chaque valeur bank_id, une par une.

  • Fonction DECODE pour comparer deux dates (date1 et date2), où, si date1> date2, la fonction DECODE doit renvoyer date2. Sinon, la fonction DECODE doit renvoyer date1
DECODE((date1 - date2) - ABS(date1 - date2), 0, date2, date1)

La formule ci-dessous est égale à 0, si date1 est supérieure à date2 :

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

L'exemple de date illustré ci-dessus peut également être modifié comme suit :

DECODE(SIGN(date1-date2), 1, date2, date1)
  • Instruction DECODE qui renverra ce qui suit :

Si hours_of_work <1 alors retourne 0.04
Si hours_of_work>=1 et <5 alors retourne 0.04
Si hours_of_work> 5 alors retourne 0.06

Ici, vous devez créer une formule qui évaluera un nombre unique pour chacune de vos plages.

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

Ceci concerne la fonction DECODE, vous devez maintenant avoir une idée claire de son fonctionnement et de l'utilité de cette fonction. Maintenant, essayez de les utiliser chaque fois qu'une logique IF-ELSE est requise lorsque vous travaillez sur SQL. J'espère que l'article vous a aidé avec les concepts de l'instruction DECODE.

Si vous souhaitez en savoir plus sur MySQL et découvrir cette base de données relationnelle open source, consultez notre Formation de certification MySQL DBA qui vient avec une formation en direct dirigée par un instructeur et une expérience de projet réelle. Cette formation vous aidera à comprendre MySQL en profondeur et vous aidera à maîtriser le sujet.

Vous avez une question pour nous ? Veuillez le mentionner dans la section commentaires de ”DECODE in SQL” et je vous répondrai.