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 :

comparaison de deux IP


Sujet :

SQL Oracle

  1. #1
    Membre du Club
    Inscrit en
    Juillet 2006
    Messages
    69
    Détails du profil
    Informations forums :
    Inscription : Juillet 2006
    Messages : 69
    Points : 65
    Points
    65
    Par défaut comparaison de deux IP
    Salut ,
    je suis en oracle 10g
    j'aime comparer deux adresse IP jusqu'au 3 eme point .
    par exemple 192.168.12.15 et 192.168.12.19 sont egaux .
    merci d'avance pour votre aide

  2. #2
    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
    utilises substr et instr
    More Code : More Bugs. Less Code : Less Bugs
    Mon Blog PL/Sql : Fichier Zip / Image BMP / Lire sqliteDB / QRCode et Images PNG ou BMP

  3. #3
    Rédacteur

    Homme Profil pro
    Développeur et DBA Oracle
    Inscrit en
    Octobre 2006
    Messages
    878
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Algérie

    Informations professionnelles :
    Activité : Développeur et DBA Oracle

    Informations forums :
    Inscription : Octobre 2006
    Messages : 878
    Points : 1 197
    Points
    1 197
    Par défaut
    ou bien
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
    SELECT 1
      FROM DUAL
     WHERE REGEXP_SUBSTR (:ip, '[^.]+', 1, 1) = REGEXP_SUBSTR (:ip1, '[^.]+', 1, 1)
       AND REGEXP_SUBSTR (:ip, '[^.]+', 1, 2) = REGEXP_SUBSTR (:ip1, '[^.]+', 1, 2)
       AND REGEXP_SUBSTR (:ip, '[^.]+', 1, 3) = REGEXP_SUBSTR (:ip1, '[^.]+', 1, 3)

  4. #4
    Expert éminent sénior Avatar de mnitu
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Octobre 2007
    Messages
    5 611
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Marne (Champagne Ardenne)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Octobre 2007
    Messages : 5 611
    Points : 11 252
    Points
    11 252
    Par défaut
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
     
    SQL> select regexp_substr('192.168.12.15','\d{1,3}\.\d{1,3}\.\d{1,3}\',1) a,
      2         regexp_substr('192.168.12.19','\d{1,3}\.\d{1,3}\.\d{1,3}\',1) b
      3    from dual
      4  ;
     
    A                                B
    -------------------------------- --------------------------------
    192.168.12                       192.168.12

  5. #5
    Rédacteur

    Homme Profil pro
    Développeur et DBA Oracle
    Inscrit en
    Octobre 2006
    Messages
    878
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Algérie

    Informations professionnelles :
    Activité : Développeur et DBA Oracle

    Informations forums :
    Inscription : Octobre 2006
    Messages : 878
    Points : 1 197
    Points
    1 197
    Par défaut
    C'est encore plus simple, mnitu bravo

  6. #6
    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
    Pour juste une opération simple comme celle ci, l'utilisation du regexpr n'est pas super utile
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    SELECT SUBSTR('192.168.12.15',1, INSTR('192.168.12.15', '.', -1)-1) a,
           SUBSTR('192.168.12.19',1, INSTR('192.168.12.19', '.', -1)-1) b
    FROM dual
    ou
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    SELECT SUBSTR('192.168.12.15',1, INSTR('192.168.12.15', '.', 1,3)-1) a,
           SUBSTR('192.168.12.19',1, INSTR('192.168.12.19', '.', 1,3)-1) b
    FROM dual
    More Code : More Bugs. Less Code : Less Bugs
    Mon Blog PL/Sql : Fichier Zip / Image BMP / Lire sqliteDB / QRCode et Images PNG ou BMP

  7. #7
    Expert confirmé
    Avatar de laurentschneider
    Homme Profil pro
    Administrateur de base de données
    Inscrit en
    Décembre 2005
    Messages
    2 944
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Suisse

    Informations professionnelles :
    Activité : Administrateur de base de données
    Secteur : Finance

    Informations forums :
    Inscription : Décembre 2005
    Messages : 2 944
    Points : 4 926
    Points
    4 926
    Par défaut
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    where 
    regexp_substr('192.168.12.15','.*\.')=regexp_substr('192.168.12.19','.*\.')
    MCM: bien sûr regexp n'est pas utile et lent de surcroix...

  8. #8
    Expert éminent sénior Avatar de mnitu
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Octobre 2007
    Messages
    5 611
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Marne (Champagne Ardenne)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Octobre 2007
    Messages : 5 611
    Points : 11 252
    Points
    11 252
    Par défaut
    Oui c'est vrai. Sauf que les requêtes ne sont pas vraiment équivalentes:

    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
     
    SQL> with data as
      2  (
      3    Select '192.168.12.15' ip From dual
      4    Union ALL
      5    Select 'AAA.BBB.CC.DDD' ip From dual
      6  )
      7  Select SUBSTR(ip,1, INSTR('192.168.12.15', '.', -1)-1) MCM,
      8         regexp_substr(ip,'.*\.') Laurent,
      9         regexp_substr(ip,'\d{1,3}\.\d{1,3}\.\d{1,3}\',1) Marius
     10    From data
     11  /
     
    MCM        LAURENT        MARIUS
    ---------- -------------- --------------
    192.168.12 192.168.12.    192.168.12
    AAA.BBB.CC AAA.BBB.CC.
    Je pense que c'est à celui qui fera l'emploie de décider de quoi il a vraiment besoin.

  9. #9
    Expert confirmé
    Avatar de laurentschneider
    Homme Profil pro
    Administrateur de base de données
    Inscrit en
    Décembre 2005
    Messages
    2 944
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Suisse

    Informations professionnelles :
    Activité : Administrateur de base de données
    Secteur : Finance

    Informations forums :
    Inscription : Décembre 2005
    Messages : 2 944
    Points : 4 926
    Points
    4 926
    Par défaut
    comme il a besoin d'une IP, 999.999.999.999 et AAA.BBB.CCC.DDD ne devrait pas exister, non?

  10. #10
    Expert éminent sénior Avatar de mnitu
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Octobre 2007
    Messages
    5 611
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Marne (Champagne Ardenne)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Octobre 2007
    Messages : 5 611
    Points : 11 252
    Points
    11 252
    Par défaut
    Salut Laurent,

    Ca peut s'améliorer tu le sais bien. Voila un lien qui discute le cas que tu évoque.

  11. #11
    Expert confirmé
    Avatar de laurentschneider
    Homme Profil pro
    Administrateur de base de données
    Inscrit en
    Décembre 2005
    Messages
    2 944
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Suisse

    Informations professionnelles :
    Activité : Administrateur de base de données
    Secteur : Finance

    Informations forums :
    Inscription : Décembre 2005
    Messages : 2 944
    Points : 4 926
    Points
    4 926
    Par défaut
    oui oui, je vois ça, mais veut-on controler si les adresses sont valables (est-ce que 000.0.00.255 est une adresse valable?) ou si les adresses A et B sont identiques jusqu'au 3e point?

    Bon, pour vérifier si les adresses sont dans le même réseau je verrais plutôt :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    create table t as select   '192.168.12.15' ip1,  '255.255.255.0' netmask1,
      '192.168.12.19' ip2,  '255.255.255.0' netmask2 from dual 
    union all select   '10.1.2.3' ip1,  '255.0.0.0' netmask1,
      '10.200.100.0' ip2,  '255.0.0.0' netmask2 from dual 
    union all select   '200.1.2.30' ip1,  '255.255.255.192' netmask1,
      '200.1.2.80' ip2,  '255.255.255.192' netmask2 from dual ;
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    select * from t 
      where bitand(regexp_substr(ip1,'\d+',1,1),regexp_substr(netmask1,'\d+',1,1)) =
      bitand(regexp_substr(ip2,'\d+',1,1),regexp_substr(netmask2,'\d+',1,1))
      and bitand(regexp_substr(ip1,'\d+',1,2),regexp_substr(netmask1,'\d+',1,2)) =
      bitand(regexp_substr(ip2,'\d+',1,2),regexp_substr(netmask2,'\d+',1,2))
      and bitand(regexp_substr(ip1,'\d+',1,3),regexp_substr(netmask1,'\d+',1,3)) =
      bitand(regexp_substr(ip2,'\d+',1,3),regexp_substr(netmask2,'\d+',1,3))
      and bitand(regexp_substr(ip1,'\d+',1,4),regexp_substr(netmask1,'\d+',1,4)) =
      bitand(regexp_substr(ip2,'\d+',1,4),regexp_substr(netmask2,'\d+',1,4));
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    IP1           NETMASK1        IP2           NETMASK2       
    ------------- --------------- ------------- ---------------
    192.168.12.15 255.255.255.0   192.168.12.19 255.255.255.0  
    10.1.2.3      255.0.0.0       10.200.100.0  255.0.0.0

  12. #12
    Expert confirmé
    Avatar de laurentschneider
    Homme Profil pro
    Administrateur de base de données
    Inscrit en
    Décembre 2005
    Messages
    2 944
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Suisse

    Informations professionnelles :
    Activité : Administrateur de base de données
    Secteur : Finance

    Informations forums :
    Inscription : Décembre 2005
    Messages : 2 944
    Points : 4 926
    Points
    4 926
    Par défaut
    Citation Envoyé par sofienems Voir le message
    Salut ,
    je suis en oracle 10g
    j'aime comparer deux adresse IP jusqu'au 3 eme point .
    par exemple 192.168.12.15 et 192.168.12.19 sont egaux .
    merci d'avance pour votre aide
    encore plus simple

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     rtrim('192.168.12.15','0123456789')=
      rtrim('192.168.12.19','0123456789')

  13. #13
    Expert éminent sénior
    Avatar de SheikYerbouti
    Profil pro
    Inscrit en
    Mai 2003
    Messages
    6 760
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2003
    Messages : 6 760
    Points : 11 862
    Points
    11 862
    Par défaut
    Sacré Laurent! Faut toujours que tu nous sortes des soluces délirantes de derrière les fagots
    Rédacteur Oracle (Oracle ACE)
    Guide Oracle ,Guide PL/SQL, Guide Forms 9i/10g, Index de recherche
    Je ne réponds pas aux questions techniques par MP
    Blogs: Forms-PL/SQL-J2EE - Forms Java Beans

  14. #14
    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
    Ah, ben oui.
    Quel con de pas y avoir pensé !
    More Code : More Bugs. Less Code : Less Bugs
    Mon Blog PL/Sql : Fichier Zip / Image BMP / Lire sqliteDB / QRCode et Images PNG ou BMP

  15. #15
    Expert éminent sénior Avatar de mnitu
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Octobre 2007
    Messages
    5 611
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Marne (Champagne Ardenne)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Octobre 2007
    Messages : 5 611
    Points : 11 252
    Points
    11 252
    Par défaut
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
     
    SQL> r
      1  SELECT chartorowid('192.165.26.19') ip1,
      2         chartorowid('192.165.26.15') ip2
      3*   from dual
     
    IP1                IP2
    ------------------ ------------------
    00000192.0165.0026 00000192.0165.0026
    Tirez pas

  16. #16
    Expert confirmé
    Avatar de laurentschneider
    Homme Profil pro
    Administrateur de base de données
    Inscrit en
    Décembre 2005
    Messages
    2 944
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Suisse

    Informations professionnelles :
    Activité : Administrateur de base de données
    Secteur : Finance

    Informations forums :
    Inscription : Décembre 2005
    Messages : 2 944
    Points : 4 926
    Points
    4 926
    Par défaut
    Citation Envoyé par mnitu Voir le message

  17. #17
    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
    Alors là.. Chapeau bas !
    Quel moyen détourné !
    More Code : More Bugs. Less Code : Less Bugs
    Mon Blog PL/Sql : Fichier Zip / Image BMP / Lire sqliteDB / QRCode et Images PNG ou BMP

  18. #18
    Expert éminent sénior Avatar de mnitu
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Octobre 2007
    Messages
    5 611
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Marne (Champagne Ardenne)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Octobre 2007
    Messages : 5 611
    Points : 11 252
    Points
    11 252
    Par défaut
    Citation Envoyé par McM Voir le message
    ...
    Quel moyen détourné !
    Ca allors!

    Bref, le point décimal n'est que'un séparateur, et peut être que on devez extraire les valeurs, n'est pas vrai ?

    IPv4 addresses are usually represented in dotted-decimal notation (four numbers, each ranging from 0 to 255, separated by dots, e.g. 147.132.42.18).
    Tiens, ça me rappele quelque chose
    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
     
    SQL> WITH t AS (
      2    SELECT '192.168.12.15' c FROM dual
      3     )
      4    SELECT to_number(extractvalue(COLUMN_VALUE,'/x')) AS liste
      5    FROM t,
      6   TABLE( xmlsequence(EXTRACT(XMLTYPE('<list><x>'|| REPLACE(c,'.','</x><x>') ||'</x></list>')
      7                             , '/list/x')))
      8   Where rownum <= 3
      9  /
     
         LISTE
    ----------
           192
           168
            12

  19. #19
    Expert éminent sénior Avatar de mnitu
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Octobre 2007
    Messages
    5 611
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Marne (Champagne Ardenne)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Octobre 2007
    Messages : 5 611
    Points : 11 252
    Points
    11 252
    Par défaut
    Citation Envoyé par laurentschneider Voir le message
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
     
    SQL> r
      1  Select rtrim('192.168.12.15','0123456789') ip1,
      2         rtrim('192.168.012.15','0123456789') ip2
      3*   From dual
     
    IP1         IP2
    ----------- ------------
    192.168.12. 192.168.012.
    Et donc il semblerait que ce n’est pas la même adresse ip.

    Par contre traceroute n’est pas de même avis.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
     
    traceroute 172.31.2.101
    ...
    2  172.31.2.101 (172.31.2.101)  24 ms *  193 ms
     
    traceroute 172.31.002.101 
    ...
     2  172.31.2.101 (172.31.2.101)  26 ms *  14 ms
    Et voilà que sur ce coup la chartorowid se comporte mieux.

    [Avertissement]
    Pour les âmes sensibles du net : il ne faut pas utiliser chartorowid comme je viens de le faire ici.
    [/Avertissement]

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
     
    SQL> r
      1  Select chartorowid('192.168.12.15') ip1,
      2         chartorowid('192.168.012.15') ip2
      3*   From dual
     
    IP1                IP2
    ------------------ ------------------
    00000192.0168.0012 00000192.0168.0012
    Petit rappel de la question
    j'aime comparer deux adresse IP jusqu'au 3 eme point .

  20. #20
    Expert confirmé
    Avatar de laurentschneider
    Homme Profil pro
    Administrateur de base de données
    Inscrit en
    Décembre 2005
    Messages
    2 944
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Suisse

    Informations professionnelles :
    Activité : Administrateur de base de données
    Secteur : Finance

    Informations forums :
    Inscription : Décembre 2005
    Messages : 2 944
    Points : 4 926
    Points
    4 926
    Par défaut

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
    $ traceroute 172.031.2.101
    traceroute to 172.031.2.101 (172.25.2.101), 30 hops max, 40 byte packets
    $ traceroute 172.31.2.101 
    traceroute to 172.31.2.101 (172.31.2.101), 30 hops max, 40 byte packets
    Il fait quel temps chez vous

Discussions similaires

  1. Comparaison de deux float
    Par MysticKhal_0 dans le forum C
    Réponses: 5
    Dernier message: 14/09/2012, 01h08
  2. PL/SQL COMPARAISON DE DEUX TABLEAUX APRES BULK
    Par mimi_été dans le forum PL/SQL
    Réponses: 5
    Dernier message: 30/06/2009, 12h14
  3. [langage] Comparaison de deux fichiers
    Par perlgirl dans le forum Langage
    Réponses: 4
    Dernier message: 04/05/2005, 16h05
  4. [SYBASE] Comparaison de deux datetime
    Par paf15 dans le forum Sybase
    Réponses: 1
    Dernier message: 17/04/2005, 16h51
  5. Réponses: 5
    Dernier message: 06/10/2003, 17h49

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