Bonjour à tous,
je dois trouver dans une table "clients" l'ensemble des correspondances existants à partir de données saisies sur un écran (n° tel, code_postal, etc).
Comme les données qui alimentent cette table viennent de plusieurs applications (+/- récente) les règles de saisies ne sont hélas pas toutes les mêmes et je dois mettre suffisamment d'intelligence dans ma recherche de correspondances pour satisfaire la majorité des cas sans plomber les perfs.
Ma table contient près de 2 millions d'enregistrements (ce qui n'aide pas).
Exemple : Trouver les correspondances à partir d'un numéro de téléphone saisi. En saisissant l'un des numéros suivants, remonter les correspondances des clients avec un numéro dans la liste suivante.
0123456789
01.23.45.67.89
01/23/45/67/89
01 23 45 67 89
01-23-45-67-89
0033123456789
Si possible également : +33(0)123456789
J'ai essayer avec la fonction scalaire suivante en utilisant replace en enlevant les caractères suivants :
J'aurai également aimé enlever tous les caractères non numériques. Lettres, etc...
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22 CREATEFUNCTION [dbo].[f_formater_telephone] ( -- Add the parameters for the function here @telephone varchar(max) ) RETURNS varchar(max) AS BEGIN -- Add the SELECT statement with parameter references here SET @telephone=replace(@telephone,' ','') SET @telephone=replace(@telephone,'-','') SET @telephone=replace(@telephone,'/','') SET @telephone=replace(@telephone,'.','') SET @telephone=replace(@telephone,'\','') SET @telephone=replace(@telephone,',','') SET @telephone=replace(@telephone,'_','') SET @telephone=replace(@telephone,':','') SET @telephone=replace(@telephone,'''','') return ltrim(rtrim(@telephone)) END
Est il possible d'utiliser les expressions régulières en SQL uniquement ?
Les perfs avec cette méthode sont... catastrophiques.
Une petite aide ? Une orientation ?
Je suis preneur de tout.
Merci à vous.
Partager