IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

MS SQL Server Discussion :

Recherche sur champs téléphone


Sujet :

MS SQL Server

  1. #1
    Membre régulier
    Profil pro
    Inscrit en
    Janvier 2005
    Messages
    90
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2005
    Messages : 90
    Points : 77
    Points
    77
    Par défaut Recherche sur champs téléphone
    Bonjour,

    Je dois faire des recherches sur un champs Téléphone d'une grosse table SQL Server 2008 (Environ 5 Millions d'enreg).

    Le problème, c'est que ce champs téléphone peut comporter des valeurs totalement différentes comme :
    • 0123456789
    • 01 23 45 67 89
    • 01-23-45-67-89
    • 01-234-567-89
    • 01.23.45.67.89
    • 123 456
    • ...
    Comment puis-je construire une requête SQL pour faire une recherche sur ce champs Telephone ?
    Est-ce que je dois installer / configurer un composant SQL ?

    Je peux modifier ma base / table mais je ne peux pas modifier les données à l'intérieur de ma colonne (Sinon j'aurai filtrer tous les caractères non numérique ).

    Merci pour votre aide.

  2. #2
    Modérateur
    Avatar de Waldar
    Homme Profil pro
    Sr. Specialist Solutions Architect @Databricks
    Inscrit en
    Septembre 2008
    Messages
    8 453
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 46
    Localisation : France, Val de Marne (Île de France)

    Informations professionnelles :
    Activité : Sr. Specialist Solutions Architect @Databricks
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Septembre 2008
    Messages : 8 453
    Points : 18 386
    Points
    18 386
    Par défaut
    Regardez du côté des expressions régulières :
    http://msdn.microsoft.com/fr-fr/magazine/cc163473.aspx
    http://justgeeks.blogspot.com/2008/0...ex-to-sql.html

    Ou en reprenant votre idée, faites la recherche uniquement sur les caractères numériques de votre colonne.

  3. #3
    Membre régulier
    Profil pro
    Inscrit en
    Janvier 2005
    Messages
    90
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2005
    Messages : 90
    Points : 77
    Points
    77
    Par défaut
    Salut,

    Merci Waldar. Super ressource que tu m'as donné là. Je n'ai jamais eu loccasion d'utiliser des assembly au sein de SQL Server. C'est donc une grande première pour moi (Et oui, on apprend tous les jours et ça c'est cool).

    J'ai compilé les sources mises à disposition par MSDN et j'ai obtenu une DLL.
    Je l'ai installé et déclaré sur mon serveur de données avec le script suivant :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    CREATE ASSEMBLY MsdnSqlRegex from 'C:\Windows\System32\Msdn.SqlRegex.dll' WITH PERMISSION_SET = SAFE
    Je vois donc maintenant mon assembly dans ma BDD mais je ne peux pas appeler les fonctions de cette assembly

    Une idée ?

    Citation Envoyé par Waldar Voir le message
    Ou en reprenant votre idée, faites la recherche uniquement sur les caractères numériques de votre colonne.
    Oui mais là, je suis obligé de "reformater" tous les numéros de ma colonne et je ne peux pas (enfin, je vais demander au propriétaire mais je suis assez pessimiste sur son accord).

    Merci à tous.

  4. #4
    Modérateur
    Avatar de Waldar
    Homme Profil pro
    Sr. Specialist Solutions Architect @Databricks
    Inscrit en
    Septembre 2008
    Messages
    8 453
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 46
    Localisation : France, Val de Marne (Île de France)

    Informations professionnelles :
    Activité : Sr. Specialist Solutions Architect @Databricks
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Septembre 2008
    Messages : 8 453
    Points : 18 386
    Points
    18 386
    Par défaut
    Citation Envoyé par Te-Deum Voir le message
    Je vois donc maintenant mon assembly dans ma BDD mais je ne peux pas appeler les fonctions de cette assembly

    Une idée ?
    Aucune, je n'ai jamais eu besoin de faire ce qui est conseillé dans ces liens


    Citation Envoyé par Te-Deum Voir le message
    Oui mais là, je suis obligé de "reformater" tous les numéros de ma colonne et je ne peux pas (enfin, je vais demander au propriétaire mais je suis assez pessimiste sur son accord)
    Non, pas besoin de "reformater" les valeurs de la colonne, vous pouvez le faire au niveau de la requête.
    Supposons que les caractères parasites soient ceux de votre exemple, espace tiret et point.
    Je recherche le numéro de téléphone 0123456789.

    Données
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    declare @t table
    (
      tel_id    tinyint      identity,
      tel_num   varchar(20)
    );
     
    insert into @t (tel_num)
    select '0123456789'     union all
    select '01 23 45 67 89' union all
    select '01-23-45-67-89' union all
    select '01-234-567-89'  union all
    select '01.23.45.67.89' union all
    select '123 456';
    Requête
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    select tel_id, tel_num
      from @t
     where replace(replace(replace(tel_num, ' ', ''), '-', ''), '.', '') = '0123456789';
     
    tel_id tel_num
    ------ --------------------
    1      0123456789
    2      01 23 45 67 89
    3      01-23-45-67-89
    4      01-234-567-89
    5      01.23.45.67.89

  5. #5
    Rédacteur

    Avatar de SQLpro
    Homme Profil pro
    Expert bases de données / SQL / MS SQL Server / Postgresql
    Inscrit en
    Mai 2002
    Messages
    21 850
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Var (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Expert bases de données / SQL / MS SQL Server / Postgresql
    Secteur : Conseil

    Informations forums :
    Inscription : Mai 2002
    Messages : 21 850
    Points : 52 984
    Points
    52 984
    Billets dans le blog
    6
    Par défaut
    Le mieux est de rajouter une colonne calculée persistante qui "nettoie" le n° de téléphone.

    Exemple :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    ALTER TABLE dbo.T_TELEPHONE_TEL
       ADD TEL_NUM_CLEAR AS dbo.dbo.F_RESCRIT(MaColonneNumTel, '0123456789', '0123456789', '') PERSISTED;
    Pour le code de la fonction F_RESCRIT, lisez l'article que j'ai écrit : http://blog.developpez.com/sqlpro/p7...corr/#more7392

    Enfin, le top est d'indexer cette nouvelle colonnes pour vos recherches.

    A +

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Requête pour une recherche sur champs multiple d'une table
    Par fred777 dans le forum Requêtes et SQL.
    Réponses: 8
    Dernier message: 07/10/2008, 16h33
  2. Réponses: 1
    Dernier message: 03/10/2008, 21h34
  3. recherche sur champs Varbinary
    Par isarian dans le forum Langage SQL
    Réponses: 7
    Dernier message: 30/06/2008, 09h47
  4. Recherche sur champ numerique
    Par ddorchies dans le forum MS SQL Server
    Réponses: 7
    Dernier message: 10/04/2008, 22h58
  5. Recherche sur champ calculé
    Par srvremi dans le forum Bases de données
    Réponses: 5
    Dernier message: 06/07/2004, 14h04

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo