[SQL] Ne pas prendre les alphanumériques ?

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 ?

3 réponses

  • Votes
  • Date
  • Date décroissante
  1. tu recupere le nombre de caractere puis tu incremente avec la boucle for
    je ne peut t'en dire plus
    1. 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.
  2. salut,

    voici un exemple :

    $query = mysql_query(SELECT xxx FROM mytable );
    $content = mysql_fetch_array($query);
    $content = preg_replace("#[^0-9]#","", $content);
    1. 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 :/
    2. 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);
  3. bonjour,

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