IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

SQL Oracle Discussion :

Nombre représentation décimale et binaire : passer de l'un à l'autre [12c]


Sujet :

SQL Oracle

  1. #1
    Membre émérite
    Homme Profil pro
    Administrateur de base de données
    Inscrit en
    Avril 2013
    Messages
    1 993
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Administrateur de base de données
    Secteur : High Tech - Produits et services télécom et Internet

    Informations forums :
    Inscription : Avril 2013
    Messages : 1 993
    Points : 2 499
    Points
    2 499
    Par défaut Nombre représentation décimale et binaire : passer de l'un à l'autre
    Salut tout le monde,

    Je viens vers vous car je n'arrive pas à trouver une fonction SQL qui permette d'obtenir la représentation décimale d'un nombre depuis sa représentation binaire.
    L'inverse est vrai avec BIN_TO_NUM :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    SQL> select bin_to_num(1,1,1) from dual;
    BIN_TO_NUM(1,1,1)
    -----------------
                    7
    mais pour avoir l'opération inverse, je dois recourir à un truc trouvé sur le net :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    SQL> SELECT LISTAGG(SIGN(BITAND(&&nb, POWER(2,LEVEL-1))),'') WITHIN GROUP(ORDER BY LEVEL DESC) bin FROM dual CONNECT BY POWER(2, LEVEL-1)<=&nb;
    Entrez une valeur pour nb : 7
    ancien   1 : SELECT LISTAGG(SIGN(BITAND(&&nb, POWER(2,LEVEL-1))),'') WITHIN GROUP(ORDER BY LEVEL DESC) bin FROM dual CONNECT BY POWER(2, LEVEL-1)<=&nb
    nouveau   1 : SELECT LISTAGG(SIGN(BITAND(7, POWER(2,LEVEL-1))),'') WITHIN GROUP(ORDER BY LEVEL DESC) bin FROM dual CONNECT BY POWER(2, LEVEL-1)<=7
    BIN
    --------------------------------------------------------------------------------
    111

    Vous n'auriez pas plus simple?

    Visiblement c'est parce que le type BINARY n'existe pas sous oracle (ainsi que BOOLEAN mais on s'écarte du sujet) que cette conversion ne va pas de soi...
    DBA Oracle
    Rédacteur du blog : dbaoraclesql.canalblog.com

  2. #2
    Expert confirmé
    Homme Profil pro
    Inscrit en
    Septembre 2006
    Messages
    2 937
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations forums :
    Inscription : Septembre 2006
    Messages : 2 937
    Points : 4 358
    Points
    4 358
    Par défaut
    Un to_char(number,'xxxxx....xxx') imbriqué dans 16 replace des digit hexa en leur valeur binaire...

  3. #3
    Membre émérite
    Homme Profil pro
    Administrateur de base de données
    Inscrit en
    Avril 2013
    Messages
    1 993
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Administrateur de base de données
    Secteur : High Tech - Produits et services télécom et Internet

    Informations forums :
    Inscription : Avril 2013
    Messages : 1 993
    Points : 2 499
    Points
    2 499
    Par défaut
    Hum, ce doit être moi mais que vient faire l'hexa ici?
    DBA Oracle
    Rédacteur du blog : dbaoraclesql.canalblog.com

  4. #4
    McM
    McM est déconnecté
    Expert éminent

    Homme Profil pro
    Développeur Oracle
    Inscrit en
    Juillet 2003
    Messages
    4 580
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Développeur Oracle

    Informations forums :
    Inscription : Juillet 2003
    Messages : 4 580
    Points : 7 740
    Points
    7 740
    Billets dans le blog
    4
    Par défaut
    Le to_char(26, 'XXXX') va te renvoyer la valeur Hexa de 26 soit '1A'.
    Chaque caractère hexa (0-F) est une représentation 4 bits (0000-1111)
    [un Octet (8 bits) = 0-255d = 00-FFh = 00000000-11111111b]
    Il suffit en effet de remplacer chaque caractère hexa par son équivalent des 4 bits binaires (en commençant par 0 puis 1 bien sûr)

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    SELECT num, TO_CHAR(num,'FMXXXXXXXXXXXXXXXXX') hexa,
    	REPLACE(REPLACE(REPLACE(REPLACE(
    	REPLACE(REPLACE(REPLACE(REPLACE(
    	 REPLACE(REPLACE(REPLACE(REPLACE(
    		REPLACE(REPLACE(REPLACE(REPLACE(TO_CHAR(num,'FMXXXXXXXXXXXXXXXXXXXXX'), '0','0000'), '1','0001'), '2','0010'), '3','0011'),
     							'4','0100'), '5','0101'), '6','0110'), '7','0111'),	
     							'8','1000'), '9','1001'), 'A','1010'), 'B','1011'),	
     							'C','1100'), 'D','1101'), 'E','1110'), 'F','1111') bin
    FROM (SELECT LEVEL num FROM dual connect BY LEVEL < 30)
    NUM HEXA BIN
    1 1 0001
    2 2 0010
    3 3 0011
    4 4 0100
    5 5 0101
    6 6 0110
    7 7 0111
    8 8 1000
    9 9 1001
    10 A 1010
    11 B 1011
    12 C 1100
    13 D 1101
    14 E 1110
    15 F 1111
    16 10 00010000
    17 11 00010001
    18 12 00010010
    19 13 00010011
    20 14 00010100
    21 15 00010101
    22 16 00010110
    23 17 00010111
    24 18 00011000
    25 19 00011001
    26 1A 00011010
    27 1B 00011011
    28 1C 00011100
    29 1D 00011101
    More Code : More Bugs. Less Code : Less Bugs
    Mon Blog PL/Sql : Fichier Zip / Image BMP / Lire sqliteDB / QRCode et Images PNG ou BMP

  5. #5
    Expert confirmé
    Homme Profil pro
    Inscrit en
    Septembre 2006
    Messages
    2 937
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations forums :
    Inscription : Septembre 2006
    Messages : 2 937
    Points : 4 358
    Points
    4 358
    Par défaut
    Citation Envoyé par Ikebukuro Voir le message
    Hum, ce doit être moi mais que vient faire l'hexa ici?
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    with data as (
      select level-1 as n from dual
      connect by level <= 256
    )
    select n, to_char(n, 'XXXXXXXXXXX') as hex, substr('00000000000000000000000000000000' || replace(
      replace(
      replace(
      replace(
      replace(
      replace(
      replace(
      replace(
      replace(
      replace(
      replace(
      replace(
      replace(
      replace(
      replace(
      replace(replace(to_char(n, 'XXXXXXXXXXX'),' ',''),'0','0000') 
      ,'1','0001')
      ,'2','0010')
      ,'3','0011')
          ,'4','0100')
          ,'5','0101')
          ,'6','0110')
          ,'7','0111')
          ,'8','1000')
          ,'9','1001')
          ,'A','1010')
          ,'B','1011')
          ,'C','1100')
          ,'D','1101')
          ,'E','1110')
        ,'F','1111'),-32) as to_binary
      from data;

  6. #6
    Membre émérite
    Homme Profil pro
    Administrateur de base de données
    Inscrit en
    Avril 2013
    Messages
    1 993
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Administrateur de base de données
    Secteur : High Tech - Produits et services télécom et Internet

    Informations forums :
    Inscription : Avril 2013
    Messages : 1 993
    Points : 2 499
    Points
    2 499
    Par défaut
    Houlala, j'ai mal à la tête
    Bon, je testerai tout ça à tête reposée.
    DBA Oracle
    Rédacteur du blog : dbaoraclesql.canalblog.com

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Conversion de nombre décimal en binaire
    Par Emma2064 dans le forum Débuter
    Réponses: 5
    Dernier message: 27/10/2016, 20h42
  2. Nombre de décimales représentatives.
    Par tasse2the dans le forum Excel
    Réponses: 2
    Dernier message: 06/02/2014, 16h49
  3. [XL-2007] Passer en nombre sans décimal avec VBA possible ?
    Par Debutant10 dans le forum Macros et VBA Excel
    Réponses: 4
    Dernier message: 20/06/2011, 10h49
  4. Conversion d'un nombre décimal en binaire.
    Par ariuss dans le forum Débuter
    Réponses: 6
    Dernier message: 17/10/2009, 11h38
  5. [TPW] Conversion d'un nombre décimal en binaire
    Par thimo2 dans le forum Turbo Pascal
    Réponses: 14
    Dernier message: 10/04/2009, 00h24

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo