PROJET AUTOBLOG


Planet-Libre

source: Planet-Libre

⇐ retour index

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

mercredi 8 octobre 2014 à 23:45

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

Gravatar de Zeph
Original post of Zeph.Votez pour ce billet sur Planet Libre.

Articles similaires