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