Précédent   Forum des professionnels en informatique > Bases de données > Oracle > SQL
SQL Forum d'entraide sur le SQL pour Oracle
Partagez cette discussion sur d'autres réseaux sociaux : Viadeo Twitter Google Facebook Digg Delicious MySpace Yahoo
Réponse Proposer ce sujet en actualité
 
Outils de la discussion
Publicité
'
Vieux 04/04/2008, 14h54   #1
Nouveau Membre du Club
 
Inscription : juillet 2006
Messages : 63
Détails du profil
Informations forums :
Inscription : juillet 2006
Messages : 63
Points : 30
Points : 30
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
sofienems est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 04/04/2008, 15h15   #2
McM
Expert Confirmé Sénior
 
Inscription : juillet 2003
Messages : 3 459
Détails du profil
Informations forums :
Inscription : juillet 2003
Messages : 3 459
Points : 4 226
Points : 4 226
utilises substr et instr
__________________
More Code : More Bugs. Less Code : Less Bugs
McM est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 04/04/2008, 16h30   #3
Rédacteur
 
Homme Salim
Développeur et DBA Oracle
Inscription : octobre 2006
Messages : 872
Détails du profil
Informations personnelles :
Nom : Homme Salim
Localisation : Canada

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

Informations forums :
Inscription : octobre 2006
Messages : 872
Points : 1 100
Points : 1 100
ou bien
Code :
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)
salim11 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 04/04/2008, 17h34   #4
Expert Confirmé Sénior
 
Avatar de mnitu
 
Homme Marius Nitu
Ingénieur développement logiciels
Inscription : octobre 2007
Messages : 3 320
Détails du profil
Informations personnelles :
Nom : Homme Marius Nitu
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 : 3 320
Points : 5 839
Points : 5 839
Code :
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
mnitu est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 04/04/2008, 17h43   #5
Rédacteur
 
Homme Salim
Développeur et DBA Oracle
Inscription : octobre 2006
Messages : 872
Détails du profil
Informations personnelles :
Nom : Homme Salim
Localisation : Canada

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

Informations forums :
Inscription : octobre 2006
Messages : 872
Points : 1 100
Points : 1 100
C'est encore plus simple, mnitu bravo
salim11 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 04/04/2008, 17h54   #6
McM
Expert Confirmé Sénior
 
Inscription : juillet 2003
Messages : 3 459
Détails du profil
Informations forums :
Inscription : juillet 2003
Messages : 3 459
Points : 4 226
Points : 4 226
Pour juste une opération simple comme celle ci, l'utilisation du regexpr n'est pas super utile
Code :
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 :
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
McM est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 07/04/2008, 16h18   #7
Expert Confirmé Sénior


 
Avatar de laurentschneider
 
Homme Laurent Schneider
Administrateur de base de données
Inscription : décembre 2005
Messages : 2 927
Détails du profil
Informations personnelles :
Nom : Homme Laurent Schneider
Localisation : Suisse

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

Informations forums :
Inscription : décembre 2005
Messages : 2 927
Points : 4 549
Points : 4 549
Code :
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...
__________________
Mon blog : laurentschneider.com
Mon livre : Advanced Oracle SQL Programming
laurentschneider est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 07/04/2008, 19h12   #8
Expert Confirmé Sénior
 
Avatar de mnitu
 
Homme Marius Nitu
Ingénieur développement logiciels
Inscription : octobre 2007
Messages : 3 320
Détails du profil
Informations personnelles :
Nom : Homme Marius Nitu
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 : 3 320
Points : 5 839
Points : 5 839
Oui c'est vrai. Sauf que les requêtes ne sont pas vraiment équivalentes:

Code :
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.
mnitu est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 07/04/2008, 19h50   #9
Expert Confirmé Sénior


 
Avatar de laurentschneider
 
Homme Laurent Schneider
Administrateur de base de données
Inscription : décembre 2005
Messages : 2 927
Détails du profil
Informations personnelles :
Nom : Homme Laurent Schneider
Localisation : Suisse

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

Informations forums :
Inscription : décembre 2005
Messages : 2 927
Points : 4 549
Points : 4 549
comme il a besoin d'une IP, 999.999.999.999 et AAA.BBB.CCC.DDD ne devrait pas exister, non?
__________________
Mon blog : laurentschneider.com
Mon livre : Advanced Oracle SQL Programming
laurentschneider est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 08/04/2008, 11h32   #10
Expert Confirmé Sénior
 
Avatar de mnitu
 
Homme Marius Nitu
Ingénieur développement logiciels
Inscription : octobre 2007
Messages : 3 320
Détails du profil
Informations personnelles :
Nom : Homme Marius Nitu
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 : 3 320
Points : 5 839
Points : 5 839
Salut Laurent,

Ca peut s'améliorer tu le sais bien. Voila un lien qui discute le cas que tu évoque.
mnitu est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 08/04/2008, 13h17   #11
Expert Confirmé Sénior


 
Avatar de laurentschneider
 
Homme Laurent Schneider
Administrateur de base de données
Inscription : décembre 2005
Messages : 2 927
Détails du profil
Informations personnelles :
Nom : Homme Laurent Schneider
Localisation : Suisse

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

Informations forums :
Inscription : décembre 2005
Messages : 2 927
Points : 4 549
Points : 4 549
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 :
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 :
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 :
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
__________________
Mon blog : laurentschneider.com
Mon livre : Advanced Oracle SQL Programming
laurentschneider est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 08/04/2008, 13h23   #12
Expert Confirmé Sénior


 
Avatar de laurentschneider
 
Homme Laurent Schneider
Administrateur de base de données
Inscription : décembre 2005
Messages : 2 927
Détails du profil
Informations personnelles :
Nom : Homme Laurent Schneider
Localisation : Suisse

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

Informations forums :
Inscription : décembre 2005
Messages : 2 927
Points : 4 549
Points : 4 549
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 :
1
2
 rtrim('192.168.12.15','0123456789')=
  rtrim('192.168.12.19','0123456789')
__________________
Mon blog : laurentschneider.com
Mon livre : Advanced Oracle SQL Programming
laurentschneider est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 08/04/2008, 13h31   #13
Rédacteur

 
Avatar de SheikYerbouti
 
Inscription : mai 2003
Messages : 6 534
Détails du profil
Informations forums :
Inscription : mai 2003
Messages : 6 534
Points : 6 471
Points : 6 471
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
SheikYerbouti est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 08/04/2008, 13h45   #14
McM
Expert Confirmé Sénior
 
Inscription : juillet 2003
Messages : 3 459
Détails du profil
Informations forums :
Inscription : juillet 2003
Messages : 3 459
Points : 4 226
Points : 4 226
Ah, ben oui.
Quel con de pas y avoir pensé !
__________________
More Code : More Bugs. Less Code : Less Bugs
McM est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 08/04/2008, 16h19   #15
Expert Confirmé Sénior
 
Avatar de mnitu
 
Homme Marius Nitu
Ingénieur développement logiciels
Inscription : octobre 2007
Messages : 3 320
Détails du profil
Informations personnelles :
Nom : Homme Marius Nitu
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 : 3 320
Points : 5 839
Points : 5 839
Code :
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
mnitu est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 08/04/2008, 16h24   #16
Expert Confirmé Sénior


 
Avatar de laurentschneider
 
Homme Laurent Schneider
Administrateur de base de données
Inscription : décembre 2005
Messages : 2 927
Détails du profil
Informations personnelles :
Nom : Homme Laurent Schneider
Localisation : Suisse

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

Informations forums :
Inscription : décembre 2005
Messages : 2 927
Points : 4 549
Points : 4 549
Citation:
Envoyé par mnitu Voir le message
__________________
Mon blog : laurentschneider.com
Mon livre : Advanced Oracle SQL Programming
laurentschneider est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 08/04/2008, 17h18   #17
McM
Expert Confirmé Sénior
 
Inscription : juillet 2003
Messages : 3 459
Détails du profil
Informations forums :
Inscription : juillet 2003
Messages : 3 459
Points : 4 226
Points : 4 226
Alors là.. Chapeau bas !
Quel moyen détourné !
__________________
More Code : More Bugs. Less Code : Less Bugs
McM est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 08/04/2008, 19h05   #18
Expert Confirmé Sénior
 
Avatar de mnitu
 
Homme Marius Nitu
Ingénieur développement logiciels
Inscription : octobre 2007
Messages : 3 320
Détails du profil
Informations personnelles :
Nom : Homme Marius Nitu
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 : 3 320
Points : 5 839
Points : 5 839
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 ?

Citation:
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 :
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
mnitu est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 09/04/2008, 09h19   #19
Expert Confirmé Sénior
 
Avatar de mnitu
 
Homme Marius Nitu
Ingénieur développement logiciels
Inscription : octobre 2007
Messages : 3 320
Détails du profil
Informations personnelles :
Nom : Homme Marius Nitu
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 : 3 320
Points : 5 839
Points : 5 839
Citation:
Envoyé par laurentschneider Voir le message
Code :
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 :
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 :
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
Citation:
j'aime comparer deux adresse IP jusqu'au 3 eme point .
mnitu est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 09/04/2008, 09h31   #20
Expert Confirmé Sénior


 
Avatar de laurentschneider
 
Homme Laurent Schneider
Administrateur de base de données
Inscription : décembre 2005
Messages : 2 927
Détails du profil
Informations personnelles :
Nom : Homme Laurent Schneider
Localisation : Suisse

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

Informations forums :
Inscription : décembre 2005
Messages : 2 927
Points : 4 549
Points : 4 549

Code :
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
__________________
Mon blog : laurentschneider.com
Mon livre : Advanced Oracle SQL Programming
laurentschneider est déconnecté   Envoyer un message privé Réponse avec citation 00
Réponse Proposer ce sujet en actualité
Outils de la discussion



Fuseau horaire GMT +2. Il est actuellement 23h31.


 
 
 
 
Partenaires

Hébergement Web