BIN_TO_NUM |
Binaire à nombre |
|---|---|
| Oracle Database SQL | 12c Release 2 (12.2) ou supérieure |
Syntaxe
| bin_to_num(vecteur) |
Paramètres
| Nom | Description |
|---|---|
| vecteur | Ce paramètre permet d'indiquer une liste de paramètres de 0 ou de 1. |
Retour
| Valeur | Description |
|---|---|
| 0 ou supérieure | Ces valeurs permettent d'indiquer les valeurs correspondant à l'ensemble de bits. |
Description
Cette fonction permet de convertir un vecteur de bit en nombre.
Remarques
- Convertit un ensemble de bits en une valeur numérique entière : La fonction BIN_TO_NUM prend en entrée une séquence de bits (0 ou 1) et retourne l'équivalent numérique de cette représentation binaire. C'est un moyen rapide de convertir une valeur binaire codée en base 2 vers un entier classique.
- Chaque paramètre est un bit (0 ou 1), lu de droite à gauche : Les bits sont lus dans l'ordre décroissant de poids, de droite à gauche. Par exemple, BIN_TO_NUM(1, 0, 1) retourne 5, car cela correspond au binaire 101, soit 1×22+0×21+1×20=51×22+0×21+1×20=5.
- N'accepte que des arguments à 0 ou 1, sinon erreur : Tous les paramètres doivent impérativement être des 0 ou des 1. Si vous passez une autre valeur (comme 2, NULL ou une chaîne), Oracle renverra une erreur de conversion ou de type.
- Pratique pour manipuler des valeurs encodées sur plusieurs drapeaux : BIN_TO_NUM est souvent utilisé lorsqu'on stocke des drapeaux (flags) binaires dans des colonnes, où chaque bit représente une option ou un état (exemple droits d'accès, options d'un produit, capteurs activés).
- Inverse logique de la fonction NUMTODSINTERVAL ou d'autres fonctions de conversion : Même si Oracle n'a pas de fonction standard inverse directe, BIN_TO_NUM peut être vu comme l'opposée conceptuelle d'une opération qui extrait ou décompose un nombre en binaire, par exemple via des opérations de bitwise (BITAND, SHIFT,...).
- Compatible avec des expressions SQL dynamiques ou des vues calculées : La fonction peut être utilisée dans des SELECT, WHERE, CASE ou VIEW, ce qui permet de traduire dynamiquement des états binaires en entiers sans avoir besoin de PL/SQL ou de logique complexe.
- Peut être utilisée pour encoder des permissions ou rôles en base de données : Grâce à BIN_TO_NUM, il est possible de stocker des combinaisons de droits ou de rôles dans un entier unique, puis de les décomposer ou tester à l'aide de BITAND et autres fonctions binaires.
- Permet d'éviter des multiplications manuelles avec des puissances de 2 : Sans BIN_TO_NUM, il faudrait écrire manuellement des formules comme b1*1 + b2*2 + b3*4 + .... Cette fonction offre donc un gain de lisibilité, simplicité et maintenabilité, surtout avec de nombreux bits.
Exemple
Voici un de valeurs consécutives :
- SELECT '0,0,0,1 = ' As Text,BIN_TO_NUM(0,0,0,1) AS Result FROM DUAL UNION
- SELECT '0,0,1,0 = ' As Text,BIN_TO_NUM(0,0,1,0) AS Result FROM DUAL UNION
- SELECT '0,0,1,1 = ' As Text,BIN_TO_NUM(0,0,1,1) AS Result FROM DUAL UNION
- SELECT '0,1,0,0 = ' As Text,BIN_TO_NUM(0,1,0,0) AS Result FROM DUAL UNION
- SELECT '0,1,0,1 = ' As Text,BIN_TO_NUM(0,1,0,1) AS Result FROM DUAL UNION
- SELECT '0,1,1,0 = ' As Text,BIN_TO_NUM(0,1,1,0) AS Result FROM DUAL UNION
- SELECT '0,1,1,1 = ' As Text,BIN_TO_NUM(0,1,1,1) AS Result FROM DUAL UNION
- SELECT '1,0,0,0 = ' As Text,BIN_TO_NUM(1,0,0,0) AS Result FROM DUAL UNION
- SELECT '1,0,0,1 = ' As Text,BIN_TO_NUM(1,0,0,1) AS Result FROM DUAL UNION
- SELECT '1,0,1,0 = ' As Text,BIN_TO_NUM(1,0,1,0) AS Result FROM DUAL UNION
- SELECT '1,0,1,1 = ' As Text,BIN_TO_NUM(1,0,1,1) AS Result FROM DUAL UNION
- SELECT '1,1,0,0 = ' As Text,BIN_TO_NUM(1,1,0,0) AS Result FROM DUAL UNION
- SELECT '1,1,0,1 = ' As Text,BIN_TO_NUM(1,1,0,1) AS Result FROM DUAL UNION
- SELECT '1,1,1,0 = ' As Text,BIN_TO_NUM(1,1,1,0) AS Result FROM DUAL UNION
- SELECT '1,1,1,1 = ' As Text,BIN_TO_NUM(1,1,1,1) AS Result FROM DUAL;
on obtiendra le résultat suivant :
| TEXT | RESULT |
| 0,0,0,1 = | 1 |
| 0,0,1,0 = | 2 |
| 0,0,1,1 = | 3 |
| 0,1,0,0 = | 4 |
| 0,1,0,1 = | 5 |
| 0,1,1,0 = | 6 |
| 0,1,1,1 = | 7 |
| 1,0,0,0 = | 8 |
| 1,0,0,1 = | 9 |
| 1,0,1,0 = | 10 |
| 1,0,1,1 = | 11 |
| 1,1,0,0 = | 12 |
| 1,1,0,1 = | 13 |
| 1,1,1,0 = | 14 |
| 1,1,1,1 = | 15 |
Voir également
Article - Les géants de l'informatique - Oracle
Dernière mise à jour : Lundi, le 11 mai 2015