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

SQL Oracle Discussion :

Comparer des chaînes de caractères dans deux tables différentes


Sujet :

SQL Oracle

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre confirmé Avatar de ninatity
    Femme Profil pro
    Développeur informatique
    Inscrit en
    Octobre 2010
    Messages
    64
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 38
    Localisation : Madagascar

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : Distribution

    Informations forums :
    Inscription : Octobre 2010
    Messages : 64
    Par défaut Comparer des chaînes de caractères dans deux tables différentes
    Bonjour à tous,

    J'ai vraiment besoin d'aide dans une requête que je dois faire.
    J'ai 2 tables différentes contenant l'une, des informations fiscales provenant de la Direction des Impôts et l'autre des informations fiscales données par des clients. Mon soucis c'est que je dois mettre à jour les données fiscales des clients de ma base et la colonne que je dois employer pour les jointures (NOM) n'a pas les mêmes données exactes.

    Exemple :
    NOM_IMPOTS NOM_CLIENT
    MARTIN DUBOIS & CIE STE MARTIN ET DUBOIS
    MARC LEVY-STRAUSS MARC ANTHONY LEVY-STRAUSS

    J'ai déjà éssayer LIKE, INSTR mais sans résultat. Pourriez-vous me guider? Merci d'avance.

  2. #2
    Membre expérimenté
    Homme Profil pro
    Ingénieur en études décisionnelles
    Inscrit en
    Février 2013
    Messages
    134
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 33
    Localisation : France, Nord (Nord Pas de Calais)

    Informations professionnelles :
    Activité : Ingénieur en études décisionnelles

    Informations forums :
    Inscription : Février 2013
    Messages : 134
    Par défaut
    Bonjour,

    Est-ce vraiment la seule clé dont tu disposes ? Tu n'as pas de numéro de siret sur lequel tu pourrais joindre ?


    Sinon, ce que je ferais, c'est créer deux nouvelles colonnes NOM_IMPOTS_TMP et NOM_CLIENT_TMP. J'alimenterais respectivement ces deux colonnes à partir de NOM_IMPOTS et NOM_CLIENT afin d'avoir un espace de travail.
    Ensuite, j'essaierais de trouver les règles qui permettent de faire le remplacement.
    Transformer les '&' en 'ET'... Enfin, tout ce que tu peux trouver, jusqu'à ce que tu aies deux colonnes identiques. Et ensuite joindre sur ces colonnes.

    Mais vu tes données j'ai du mal à voir comment une unique requête te permettra d'avoir ce que tu souhaites. Déjà, si tu joins avec un like '%MARTIN%' par exemple (beurk), tu risques de perdre ton lien 1,1, ce qui n'est pas ce que tu veux j'imagine...

  3. #3
    McM
    McM est déconnecté
    Expert confirmé

    Homme Profil pro
    Développeur Oracle
    Inscrit en
    Juillet 2003
    Messages
    4 580
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Développeur Oracle

    Informations forums :
    Inscription : Juillet 2003
    Messages : 4 580
    Billets dans le blog
    4
    Par défaut
    Impossible à faire en automatique avec une fiabilité de 100%
    Tu peux te créer une fonction de similarité afin de voir les rapprochements possibles, mais tu auras forcément une validation d'un utilisateur

  4. #4
    Membre confirmé Avatar de ninatity
    Femme Profil pro
    Développeur informatique
    Inscrit en
    Octobre 2010
    Messages
    64
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 38
    Localisation : Madagascar

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : Distribution

    Informations forums :
    Inscription : Octobre 2010
    Messages : 64
    Par défaut
    Est-ce vraiment la seule clé dont tu disposes ? Tu n'as pas de numéro de siret sur lequel tu pourrais joindre ?
    Je n'ai que les deux colonnes provenant de la Direction des impôts (Nom et NIF). Ils ne veulent pas nous donner plus d'informations . Oui j'ai déjà fait le LIKE '%MARTIN%', cela sort pleines de lignes et je ne veux pas me tromper.
    Impossible à faire en automatique avec une fiabilité de 100%
    Bref merci pour vos conseils, je vais chercher quelques astuces et je vous tiendrai au courant.

  5. #5
    Modérateur
    Avatar de Waldar
    Homme Profil pro
    Sr. Specialist Solutions Architect @Databricks
    Inscrit en
    Septembre 2008
    Messages
    8 454
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 47
    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 454
    Par défaut
    Quel est le volume de données que vous devez recouper ?

    Oracle implémente nativement une version légèrement boguée de la distance de Jaro-Winkler dont les résultats avaient été probants sur un besoin similaire :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    with cte_clients (lid, nom_impots, nom_client) as
    (
    select 1, 'MARTIN DUBOIS & CIE', 'STE MARTIN ET DUBOIS'      from dual union all
    select 2, 'MARC LEVY-STRAUSS'  , 'MARC ANTHONY LEVY-STRAUSS' from dual
    )
      select lid
           , round(100 * utl_match.jaro_winkler(nom_impots, nom_client), 3) as jws
        from cte_clients
    order by lid asc;
     
           LID        JWS
    ---------- ----------
             1     71,404
             2     86,541
    Le score calculé est un pourcentage de correspondance.

    Un des défauts de cet algorithme est sont coût CPU : vous aller devoir calculer les scores de beaucoup de correspondances : même 2000 vs 2000, ça fait 4.000.000 de calculs.

    Ce que nous avions fait avec les collègues à l'époque, était de rechercher d'abord les correspondances exactes, puis les correspondances like, puis les correspondances via la distance de Jaro-Winkler afin d'en faire le moins possible.

  6. #6
    Rédacteur

    Avatar de SQLpro
    Homme Profil pro
    Expert bases de données / SQL / MS SQL Server / Postgresql
    Inscrit en
    Mai 2002
    Messages
    21 998
    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 998
    Billets dans le blog
    6
    Par défaut
    Bonjour

    Utilisez l'algorithme de rapprochement que j'ai écrit :
    http://sqlpro.developpez.com/cours/s...ns-motifs/#LVI
    Il est très rapide...
    Il donne même d'excellent résultat pour la police à la recherche des terroriste dont les noms sont phonétisés par rapport par exemple à l'arabe !

    Si vous écrivez la fonction en PL/SQL, renvoyez moi le code afin que je le publie....
    A +
    Frédéric Brouard - SQLpro - ARCHITECTE DE DONNÉES - expert SGBDR et langage SQL
    Le site sur les SGBD relationnels et le langage SQL: http://sqlpro.developpez.com/
    Blog SQL, SQL Server, SGBDR : http://blog.developpez.com/sqlpro
    Expert Microsoft SQL Server - M.V.P. (Most valuable Professional) MS Corp.
    Entreprise SQL SPOT : modélisation, conseils, audit, optimisation, formation...
    * * * * * Expertise SQL Server : http://mssqlserver.fr/ * * * * *

Discussions similaires

  1. Comparer des chaînes de caractères
    Par aurelie689 dans le forum Débuter avec Java
    Réponses: 1
    Dernier message: 02/05/2009, 13h22
  2. Réponses: 2
    Dernier message: 30/04/2009, 12h46
  3. [16F876] Ecrire des chaînes de caractères dans un tableau
    Par aminousse dans le forum Autres architectures
    Réponses: 0
    Dernier message: 01/03/2008, 01h08
  4. Changer des chaînes de caractères dans un fichier
    Par troumad dans le forum Shell et commandes GNU
    Réponses: 4
    Dernier message: 10/11/2006, 08h45

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