Forum |  HardWare.fr | News | Articles | PC | S'identifier | S'inscrire | Shop Recherche
1123 connectés 

  FORUM HardWare.fr
  Programmation
  SQL/NoSQL

  [SQL] Filtrer les chiffres

 


 Mot :   Pseudo :  
 
Bas de page
Auteur Sujet :

[SQL] Filtrer les chiffres

n°2283555
sire de Bo​tcor
Armorican way of life
Posté le 13-06-2016 à 11:27:02  profilanswer
 

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
mood
Publicité
Posté le 13-06-2016 à 11:27:02  profilanswer
 

n°2283559
sire de Bo​tcor
Armorican way of life
Posté le 13-06-2016 à 11:57:41  profilanswer
 

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
n°2283569
zerist
Posté le 13-06-2016 à 13:02:53  profilanswer
 

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/
n°2283592
rufo
Pas me confondre avec Lycos!
Posté le 13-06-2016 à 15:48:21  profilanswer
 

+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
n°2283594
sire de Bo​tcor
Armorican way of life
Posté le 13-06-2016 à 15:54:46  profilanswer
 

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
n°2283596
zerist
Posté le 13-06-2016 à 16:09:02  profilanswer
 

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/
n°2283601
sire de Bo​tcor
Armorican way of life
Posté le 13-06-2016 à 16:21:41  profilanswer
 

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
n°2283614
zerist
Posté le 13-06-2016 à 21:44:07  profilanswer
 

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/
n°2283630
rufo
Pas me confondre avec Lycos!
Posté le 14-06-2016 à 10:02:41  profilanswer
 

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

Aller à :
Ajouter une réponse
  FORUM HardWare.fr
  Programmation
  SQL/NoSQL

  [SQL] Filtrer les chiffres

 

Sujets relatifs
[SQL Server] clé étrangère et Check constraint - NULL[Excel] Création d'une requête SQL ?
[SQL] Aide exos (simple)Problème requête SQL: command not properly ended
Delphi 7 et Sql server 2008[SQL] Requete sur WSUS
WHERE EXISTS (SQL)Aide SQL très simple
[SQL/SAS] Requête qui ne fonctionne pas 
Plus de sujets relatifs à : [SQL] Filtrer les chiffres


Copyright © 1997-2022 Hardware.fr SARL (Signaler un contenu illicite / Données personnelles) / Groupe LDLC / Shop HFR