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

Langage SQL Discussion :

Fonctions de chaines de charactères


Sujet :

Langage SQL

  1. #1
    Membre régulier
    Profil pro
    Inscrit en
    Septembre 2007
    Messages
    144
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2007
    Messages : 144
    Points : 97
    Points
    97
    Par défaut Fonctions de chaines de charactères
    Bonjour,
    Dans le cadre d'un dédoublonage, je dois comparer des chaines, pouvant contenir tous types de charactère, en les mettants en majuscule, sans accent, sans espace et sans tirets...
    Pour les majuscules et les espaces, UPPER et TRIM suffisent, mais comment faire pour les accents? et les tirets?

    Enfin, si cela demande un traitement complexe (remplacer à par a, é par e...) comment rassembler tout ça en une seule fonction à appliquer sur les champs comparés?

    Merci d'avance,
    LDPDC

  2. #2
    Membre éprouvé
    Profil pro
    Inscrit en
    Août 2008
    Messages
    861
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2008
    Messages : 861
    Points : 965
    Points
    965
    Par défaut
    Salut,

    Tu peux créer une fonction qui te remplace ces caractères avec des REPLACE imbriqués, un pour chaque caractère spécial.
    Tu n'auras qu'à appliquer la fonction à tes champs lors de la comparaison.

  3. #3
    Modérateur
    Avatar de al1_24
    Homme Profil pro
    Retraité
    Inscrit en
    Mai 2002
    Messages
    9 091
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 63
    Localisation : France, Val de Marne (Île de France)

    Informations professionnelles :
    Activité : Retraité
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Mai 2002
    Messages : 9 091
    Points : 28 362
    Points
    28 362
    Par défaut
    Pour te donner la meilleure réponse, il nous faudrait connaître le SGBD avce lequel tu travailles. Chacun a ses particularités.
    Modérateur Langage SQL
    Règles du forum Langage SQL à lire par tous, N'hésitez pas à consulter les cours SQL
    N'oubliez pas le bouton et pensez aux balises
    [code]
    Si une réponse vous a aidé à résoudre votre problème, n'oubliez pas de voter pour elle en cliquant sur
    Aide-toi et le forum t'aidera : Un problème exposé sans mentionner les tentatives de résolution infructueuses peut laisser supposer que le posteur attend qu'on fasse son travail à sa place... et ne donne pas envie d'y répondre.

  4. #4
    Membre régulier
    Profil pro
    Inscrit en
    Septembre 2007
    Messages
    144
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2007
    Messages : 144
    Points : 97
    Points
    97
    Par défaut
    Rebonjour,
    Je suis sous Oracle 11g... La méthode de Snipah fonctionne tout à fait, mais s'il y a plus rapide, je suis preneur.
    LDPDC

  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 837
    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 837
    Points : 52 930
    Points
    52 930
    Billets dans le blog
    5
    Par défaut
    Sous SQL Server il suffit d'utiliser une collation non sensible aux accents pour ce faire. C'est d'ailleurs la norme SQL qui a prévu cela depuis la version de 1992...

    Exemple :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    WHERE  Col1 = Col2 COLLATE French_CI_AI
    CI => CaseInsensitive
    AI => AccentInsensitive

    Lisez l'article que j'ai écrit à ce sujet : http://sqlpro.developpez.com/cours/s...er/collations/
    Voyez si Oracle implémente cela (je ne crois pas d'ailleurs).

    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/ * * * * *

  6. #6
    Membre éprouvé
    Profil pro
    Inscrit en
    Août 2008
    Messages
    861
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2008
    Messages : 861
    Points : 965
    Points
    965
    Par défaut
    En effet, on peut utiliser NLSSORT pour Oracle :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    select 1 from dual where 
    NLSSORT('ABE', 'NLS_SORT = French_AI') = NLSSORT('abé', 'NLS_SORT = French_AI')
    Par contre, pour le besoin de LDPDC, il faudra quand même prévoir d'enlever les espaces et les tirets des chaînes de caractère comparées.

  7. #7
    Rédacteur

    Avatar de SQLpro
    Homme Profil pro
    Expert bases de données / SQL / MS SQL Server / Postgresql
    Inscrit en
    Mai 2002
    Messages
    21 837
    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 837
    Points : 52 930
    Points
    52 930
    Billets dans le blog
    5
    Par défaut
    Brzef, encore une fois, Oracle n'a pas fait simple et joue hors norme !!! C'est d'autant plus navrant que Jim Melton, rapporteur de la norme SQL au comité ISO est le principal conseillé technique d'Oracle !!!

    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/ * * * * *

  8. #8
    Membre régulier
    Profil pro
    Inscrit en
    Septembre 2007
    Messages
    144
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2007
    Messages : 144
    Points : 97
    Points
    97
    Par défaut
    D'accord, merci bien pour vos réponses... C'est effectivement étrange toutes ces libertés prises avec la norme et assez dérangeant quand on passe d'un SGDB à l'autre.
    LDPDC

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

Discussions similaires

  1. Fonctions et chaine
    Par fveysseire dans le forum C
    Réponses: 3
    Dernier message: 07/06/2006, 14h44
  2. [VBA-E] test sur une chaine de charactère
    Par gruget dans le forum Macros et VBA Excel
    Réponses: 7
    Dernier message: 10/04/2006, 14h24
  3. téléphone portable & chaines de charactères
    Par loupdeau dans le forum Périphériques
    Réponses: 2
    Dernier message: 08/12/2005, 18h23
  4. [C#] Fonction de Chaine de caractères
    Par slyv dans le forum Windows Forms
    Réponses: 8
    Dernier message: 13/12/2004, 18h41
  5. Réponses: 10
    Dernier message: 17/12/2003, 13h51

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