Filtrer les chiffres [SQL] - SQL/NoSQL - Programmation
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...
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 :
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...
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 ?
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 ?
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...
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 :
|
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
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).
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