8791 sujets

Développement web côté serveur, CMS

Bonjour à vous,

Je cherche à manipuler une adresse IP à partir d'une requête SQL : il faudrait que je puisse extraire facilement les 4 éléments de l'adresse IP afin d'y effectuer une opération mathématique.

Si l'adresse IP (fictive) est la suivante : 112.64.0.14 ; j'arrive à extraire très facilement 112 et 14 grâce à la fonction SUBSTRING_INDEX.

SELECT SUBSTRING_INDEX('112.64.0.14', '.', 1) AS element_1, SUBSTRING_INDEX('112.64.0.14', '.', -1) AS element_4;


Comment extraire les deux autres valeurs (64 et 0) aussi facilement (sans passer par un SUBSTRING_INDEX imbriqué) ? Cependant, si la solution la plus facile et rapide est le SUBSTRING_INDEX imbriqué alors j'utiliserai cette méthode.

Solution avec la fonction imbriquée :
SELECT SUBSTRING_INDEX( '112.64.0.14', '.', 1 ) AS element_1, SUBSTRING_INDEX( SUBSTRING_INDEX( '112.64.0.14', '.', 2 ) , '.', -1 ) AS element_2, SUBSTRING_INDEX( SUBSTRING_INDEX( '112.64.0.14', '.', -2 ) , '.', 1 ) AS element_3, SUBSTRING_INDEX( '112.64.0.14', '.', -1 ) AS element_4;


Merci d'avance pour votre aide !
Modifié par Alphonse (13 Jan 2011 - 11:27)
Salut,

Oups j'ai un substring imbriqué, je m'auto-censure.

Sinon, il n'y a a priori pas de fonction "split" en mysql (par contre, un petit explode en php fait l'affaire).
Modifié par Marvin Le Rouge (13 Jan 2011 - 13:02)
En effet, je n'ai pas trouvé mieux et la requête s'exécute instantanément même sur un très grand nombre de résultat.

edit: Résolu
Modifié par Alphonse (13 Jan 2011 - 13:03)
Trouvé dans la doc de MySQL :
http://dev.mysql.com/doc/refman/5.0/en/string-functions.html

SELECT
`ip` , 
SUBSTRING_INDEX( `ip` , '.', 1 ) AS a,
SUBSTRING_INDEX(SUBSTRING_INDEX( `ip` , '.', 2 ),'.',-1) AS b, 
SUBSTRING_INDEX(SUBSTRING_INDEX( `ip` , '.', -2 ),'.',1) AS c,
SUBSTRING_INDEX( `ip` , '.', -1 ) AS d
FROM log_table


Oups, Marvin a posté la même solution que moi pendant que je rédigeais ma réponse Smiley confused
Modifié par moust (13 Jan 2011 - 13:04)