[SQL] Filtrer les chiffres

Filtrer les chiffres [SQL] - SQL/NoSQL - Programmation

Marsh Posté le 13-06-2016 à 11:27:02    

Bonjour,

 

Est-ce qu'il existe, en SQL, une fonction qui permette de ne garder que les chiffres d'un champ ?

 

En fait je dois faire une recherche de numéro de téléphone et les gens rentrent des numéros avec des espaces, des tirets, des points, etc : j'ai une fonction PHP qui permet de filtrer les chiffres sur ce qu'ils ont rentré dans le champ de saisie de la recherche, mais il me faudrait l'équivalent SQL pour filtrer ce qui se trouve dans la base.
Quelque chose comme ça : "SELECT num_tel FROM gens WHERE SQL_FILTRER_CHIFFRES(num_tel) = '" . php_filtrer_chiffres($tel_saisi) . "';"

 

Je précise que c'est une base MariaDB (~MySQL)
Merci d'avance

 

sdB


Message édité par sire de Botcor le 13-06-2016 à 11:31:45

---------------
«Ceux qui croient que les peuples suivront leurs intérêts et non leurs passions n’ont rien compris au XXe siècle.» © Raymond Aron
Reply

Marsh Posté le 13-06-2016 à 11:27:02   

Reply

Marsh Posté le 13-06-2016 à 11:57:41    

En attendant, j'ai écrit ça :
... WHERE replace(replace(replace(replace(num_tel,'/',''),'-',''),'.',''),' ','') = ...
 
pas propre, mais ça remplace les principaux caractères que les gens utilisent comme séparateur dans les numéros de téléphone...


---------------
«Ceux qui croient que les peuples suivront leurs intérêts et non leurs passions n’ont rien compris au XXe siècle.» © Raymond Aron
Reply

Marsh Posté le 13-06-2016 à 13:02:53    

Salut,
 
Le plus simple (et propre) serait de faire ça en PHP.
 
Si je comprends bien tu as des anciennes données en base que tu souhaites filtrer ?  
 
Si c'est bien ça, le mieux serait d'écrire un petit script PHP qui fasse :

  • Un select
  • filtrer les données
  • Insert les nouvelles données issues du filtrage
  • delete les anciennes données.


---------------
https://www.flickr.com/photos/182924845@N04/
Reply

Marsh Posté le 13-06-2016 à 15:48:21    

+1 pour déléguer à PHP le soin de formater correctement les données (ici, les num tél) avant de les mettre en BD ;)
 
Sinon, en SQL, tu peux utiliser les RegExp pour faire ta recherche aussi...


---------------
Astres, outil de help-desk GPL : http://sourceforge.net/projects/astres, ICARE, gestion de conf : http://sourceforge.net/projects/icare, Outil Planeta Calandreta : https://framalibre.org/content/planeta-calandreta
Reply

Marsh Posté le 13-06-2016 à 15:54:46    

Le truc c'est que je n'ai pas le droit de modifier le contenu de la base de données...
 
Il y a des regex pour filtrer "tout sauf les chiffres" en SQL ?


---------------
«Ceux qui croient que les peuples suivront leurs intérêts et non leurs passions n’ont rien compris au XXe siècle.» © Raymond Aron
Reply

Marsh Posté le 13-06-2016 à 16:09:02    

sire de Botcor a écrit :

Le truc c'est que je n'ai pas le droit de modifier le contenu de la base de données...


 
Que dois-tu faire alors exactement ?


---------------
https://www.flickr.com/photos/182924845@N04/
Reply

Marsh Posté le 13-06-2016 à 16:21:41    

Je dois lire la base et afficher la liste des gens dont le numéro de téléphone correspond à ce que l'utilisateur a saisi en critère de recherche.

 

Ce serait ultra simple si le numéro de téléphone saisi en critère avait toujours le même format que celui de la base, mais non, tout est saisi comme ça vient sur le moment, que ce soit dans la base comme (probablement) dans les critères de recherche (vu que ce sont les mêmes utilisateurs) :
j'ai des numéros comme ça par exemple 06/01.02.03.04 ou bien 0601020304 ou encore 06 01 02 03 04 et des 06-01-02-03-04...


Message édité par sire de Botcor le 13-06-2016 à 16:22:16

---------------
«Ceux qui croient que les peuples suivront leurs intérêts et non leurs passions n’ont rien compris au XXe siècle.» © Raymond Aron
Reply

Marsh Posté le 13-06-2016 à 21:44:07    

C'est un cas d'école ton truc ? Parce que si c'est une application réelle c'est super mal réalisé...
 
Je vois pas trop d'autre solution que de faire un select sans "where", puis de faire le tri en PHP...
 
EDIT : je sais pas si ta base le supporte, mais sinon tu as un opérateur "REGEXP" en SQL, tu pourrais faire quelque chose du style :
 

Code :
  1. SELECT * FROM utilisateur WHERE num_telephone REGEXP "06[-/. ]*01[-/. ]*02[-/. ]*03[-/. ]*04"


 
Je te donne ça à titre d'exemple, là ça matcherait 06 01 02 03 04 mais aussi 06-01-02-03-04 ou 06.01.02.03.04 ou n'importe quel mix...
 
Documentation ici : http://dev.mysql.com/doc/refman/5. [...] ching.html


Message édité par zerist le 13-06-2016 à 21:49:45

---------------
https://www.flickr.com/photos/182924845@N04/
Reply

Marsh Posté le 14-06-2016 à 10:02:41    

Si ça BD commence à être grosse, le traitement par PHP sans WHERE dans le SQL risque de sacrément ralentir l'appli :/
Une VUE en SQL basée sur une REGEXP ou une procédure stockée me paraît plus adaptée. Un trigger au moment de l'insert pourrait aussi faire le job (soit formater le num tél, soit mettre à jour la VUE).


---------------
Astres, outil de help-desk GPL : http://sourceforge.net/projects/astres, ICARE, gestion de conf : http://sourceforge.net/projects/icare, Outil Planeta Calandreta : https://framalibre.org/content/planeta-calandreta
Reply

Sujets relatifs:

Leave a Replay

Make sure you enter the(*)required information where indicate.HTML code is not allowed