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
Original post of Zeph.Votez pour ce billet sur Planet Libre.
Articles similaires
- Zeph : Sauvegarder ses bases de données MariaDB / MySQL (23/09/2014)