MariaDB/MySQL "telnumber" récupérer un numéro de téléphone

Fonction digits pour extraite les chiffres
Fonction telnumber pour extraire un numéro de téléphone

 

J'ai besoin d'extraire des numéros de téléphone d'un champs sur lequel il n'y a eu aucun contrôle lors la saisie.
J'ai procédé en deux étapes la première création d'une fonction digits qui va extraire uniquement les chiffres 0-9 présent dans le champs, suite à l'appel de digit les espaces, points, parenthèses ... seront supprimés

Exemple : SELECT digits('+(33)1457 812.45')        =>   '33145781245'

DROP FUNCTION IF EXISTS digits;
DELIMITER |
CREATE FUNCTION digits(str text) RETURNS text CHARSET latin1 DETERMINISTIC NO SQL 
BEGIN
  DECLARE i, len INT DEFAULT 1;
  DECLARE ret text DEFAULT '';
  DECLARE c CHAR(1);
  IF(str IS NULL) THEN RETURN ""; END IF;
  SET len = LENGTH( str );
  WHILE i <= len DO
    SET c = MID( str, i, 1 );
    IF c BETWEEN '0' AND '9' THEN 
      SET ret=CONCAT(ret,c);
    END IF;
    SET i = i + 1;
  END WHILE;
  RETURN ret;
END |
DELIMITER ; 

Pour les numéro français je ne veux pas garder le (33) mais 0 à la place, et j'élimine tous les numéros ayant une longueur inférieure à 10, ça va être le travail de la fonction telnumber.

Exemple :  SELECT telnumber('+(33)1457 812.45')        =>   '0145781245'

DROP FUNCTION IF EXISTS telnumber;
DELIMITER |
CREATE FUNCTION telnumber(str text) RETURNS text CHARSET latin1 DETERMINISTIC NO SQL 
BEGIN
  DECLARE c CHAR(2);
  IF(str IS NULL) THEN RETURN ""; END IF;
  SET str=digits(str);
  SET c = LEFT( str, 2);
  IF c='33' THEN
	SET str = CONCAT('0',RIGHT(str,9));
  END IF;
  IF LENGTH(str)<10 THEN
	SET str = '';
  END IF;
  RETURN str;
END |
DELIMITER ; 

Si vous souhaitez utiliser ces fonctions, le plus simple pour les ajouter à une base est de les copier dans un fichier telnumber.sql. Et de l'importer en ligne de commande.

mysql.exe -h HOST -u USERNAME -pPASSWORD MABASE < telnumber.sql
Vus : 968
Publié par Zeph : 15