[SQL] Ne pas prendre les alphanumériques ?

Fermé
Kopros Messages postés 595 Date d'inscription mardi 25 septembre 2007 Statut Membre Dernière intervention 3 février 2020 - 8 août 2011 à 20:36
vordano Messages postés 1682 Date d'inscription mardi 12 juillet 2011 Statut Membre Dernière intervention 20 juillet 2012 - 9 août 2011 à 13:07
Salut à tous !

J'ai encore un soucis pour faire une regExp (c'est le truc je crois que je vais jamais y arriver...)

Mon champ MySQL est de type VARCHAR. Je cherche à faire une requête qui ne me retourne que les caractères numériques de ce champ. Un peu comme si je faisais en php ereg_replace("[^0-9]","",$chaine); sauf que ce serait pas avec une variable mais avec une requête SQL ^^

Par exemple si le champ contient :
blablabla 01.23.45.67.89 blabla
je voudrais que le résultat de la requête soit :
0123456789

C'est possible ou pas ?


A voir également:

3 réponses

schancel Messages postés 296 Date d'inscription dimanche 20 mars 2011 Statut Membre Dernière intervention 7 décembre 2018 49
8 août 2011 à 20:49
tu recupere le nombre de caractere puis tu incremente avec la boucle for
je ne peut t'en dire plus
0
Kopros Messages postés 595 Date d'inscription mardi 25 septembre 2007 Statut Membre Dernière intervention 3 février 2020 89
8 août 2011 à 21:17
Justement le but c'est d'éviter d'alourdir le code avec une boucle. D'ailleurs si j'avais voulu faire ça j'aurais utilisé un foreach et non une boucle for.
0
salut,

voici un exemple :


$query = mysql_query(SELECT xxx FROM mytable );
$content = mysql_fetch_array($query);
$content = preg_replace("#[^0-9]#","", $content);
0
Kopros Messages postés 595 Date d'inscription mardi 25 septembre 2007 Statut Membre Dernière intervention 3 février 2020 89
Modifié par Kopros le 8/08/2011 à 21:47
Je pense que je vais faire comme ça en attendant de trouver un code plus propre. Merci !

EDIT : En fait je ne peux pas faire ça, étant donné que je fais un déjà un mysql_fetch_array après, et que je ne peux pas l'enlever. Ou alors faudrait que je défasse le premier mais là je sais pas si c'est possible et ça deviendrait vraiment trop sale comme code.

Je cherche encore :/
0
Groarh Messages postés 682 Date d'inscription vendredi 1 août 2008 Statut Membre Dernière intervention 28 juin 2015 185
Modifié par Groarh le 9/08/2011 à 13:05
Salut,
j'ai fait plusieurs recherches mais je crois qu'il n'est pas possible de faire des substitutions à l'aide d'une expression régulière en MySQL. Il faut donc que tu passes par PHP, et donc la solution proposée par ammmmmine est la meilleure.

Juste deux petites remarques :
- les doubles quotes demandent un peu plus de travail à PHP car il doit interpréter les variables et les caractères spéciaux comme \t ou \n. Un exemple simple :
<pre><?php
$s = 'abc';
echo '$s \n X'; // simple quotes
echo '<hr>';
echo "$s \n X"; // double quotes
?></pre>

Il vaut mieux utiliser les simples quotes chaque fois que c'est possible.

- Avec PCRE on peut utiliser la classe \D pour sélectionner tout ce qui n'est pas numérique (le contraire de \d). Je rajoute un + pour traiter en une fois les groupes de plusieurs caractères, c'est plus efficace.

Au final :
$content = preg_replace('#\D+#','', $content);
0
vordano Messages postés 1682 Date d'inscription mardi 12 juillet 2011 Statut Membre Dernière intervention 20 juillet 2012 316
9 août 2011 à 13:07
bonjour,

le sql étant un language d'interrogation des bdd, normalement on ne peux pas traiter le résultat avant de le renvoyer
0