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

Administration Oracle Discussion :

NLS_SORT German ü et ue


Sujet :

Administration Oracle

  1. #1
    Membre confirmé
    Avatar de argoet
    Inscrit en
    Mai 2002
    Messages
    582
    Détails du profil
    Informations forums :
    Inscription : Mai 2002
    Messages : 582
    Points : 562
    Points
    562
    Par défaut NLS_SORT German ü et ue
    Bonsoir à tous

    Sous Oracle 10g
    J'ai un problème avec l'utlisation du NLS_SORT
    Voici un debut de doc : ==>Doc Oracle NLS_SORT
    Je cherche à Trier et Identifier "Müller" et "MUELLER" comme la meme chaine de caractère
    L'exemple donné par Oracle est celui la avec GROSSE et Große
    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
    23
    24
    25
    26
    27
    28
    SQL> CREATE TABLE test1(word VARCHAR2(12));
    SQL> INSERT INTO test1 VALUES('GROSSE');
    SQL> INSERT INTO test1 VALUES('Große');
    SQL> INSERT INTO test1 VALUES('große');
    SQL> SELECT * FROM test1;
     
    WORD
    ------------
    GROSSE
    Große
    große
    Perform a case-sensitive search for GROSSE as follows:
     
    SQL> SELECT word FROM test1 WHERE word='GROSSE';
     
    WORD
    ------------
    GROSSE
    Perform a case-insensitive search for GROSSE using the NLS_UPPER function:
     
    SELECT word FROM test1
    WHERE NLS_UPPER(word, 'NLS_SORT = XGERMAN') = 'GROSSE';
     
    WORD
    ------------
    GROSSE
    Große
    große
    Normalement en Allemagne le nom Müller et Mueller est considéré comme identique.
    Mais j'ai beau triturer le NLS_SORT="XGERMAN_XX" sans succes pour trier et identifier "Müller" et "MUELLER" comme la meme chaine de caractères
    Que faut il modifier à la requete suivante pour que "Müller" = "MUELLER"
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    SELECT 1 FROM dual
    WHERE NLS_UPPER('MUELLER', 'NLS_SORT = XGERMAN') = NLS_UPPER('müller', 'NLS_SORT = XGERMAN');
    Signé : Capitaine Jean-Luc Picard

  2. #2
    Rédacteur

    Homme Profil pro
    Consultant / formateur Oracle et SQL Server
    Inscrit en
    Décembre 2002
    Messages
    3 460
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Var (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Consultant / formateur Oracle et SQL Server

    Informations forums :
    Inscription : Décembre 2002
    Messages : 3 460
    Points : 8 074
    Points
    8 074
    Par défaut
    J'ai jeté un oeil rapide dans "Oracle locale builder", aucun tri allemand prédéfini ne semble prévoir cette équivalence.
    J'ai l'impression qu'il faut passer par Oracle Text, comme présenté ici : http://nuijten.blogspot.fr/2009/03/o...ic-search.html
    Consultant / formateur Oracle indépendant
    Certifié OCP 12c, 11g, 10g ; sécurité 11g

    Ma dernière formation Oracle 19c publiée sur Linkedin : https://fr.linkedin.com/learning/oracle-19c-l-administration

  3. #3
    Membre chevronné Avatar de Garuda
    Homme Profil pro
    Chef de projet / Urbaniste SI
    Inscrit en
    Juin 2007
    Messages
    1 285
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Vaucluse (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Chef de projet / Urbaniste SI
    Secteur : Bâtiment

    Informations forums :
    Inscription : Juin 2007
    Messages : 1 285
    Points : 2 071
    Points
    2 071
    Par défaut
    As-tu essayé avec NLS_SORT=BINARY_AI .
    Je dis ca parce qu'en francais, cela permet de ne pas faire le distinguo entre é,è et e (donc ne pas tenir compte des accents)
    Garuda गरूड
    Brahmâ la Guerre et Vishnu la Paix

    Oracle 12C R2 - Forms11GR2 - Toad 12 - sharePoint 2010

  4. #4
    Membre éclairé
    Profil pro
    Inscrit en
    Février 2010
    Messages
    412
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2010
    Messages : 412
    Points : 807
    Points
    807
    Par défaut
    sort binary?

    Pour pas tenir compte des accents il y a _ai et pour ne pas tenir compte de la casse il y a _ci.
    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
    23
    24
    25
    TMP@MINILHC >TMP@MINILHC >select * from tmp order by nlssort(vc,'nls_sort=french_ai');
     
    VC
    ----------
    cddf
    cdef
    cdEf
    cd┐f
    cd┐f
    cdff
     
    6 rows selected.
    Elapsed: 00:00:00.00
    TMP@MINILHC >select * from tmp order by 1;
     
    VC
    ----------
    cdEf
    cddf
    cdef
    cdff
    cd┐f
    cd┐f
     
    6 rows selected.
    (Pas les accents sur le mien)

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
     
    create table tmp (vc varchar2(20));
    insert into tmp values ('cdéf');
    insert into tmp values ('cdèf');
    insert into tmp values ('cdef');
    insert into tmp values ('cddf');
    insert into tmp values ('cdff');
    insert into tmp values ('cdEf');
    select * from tmp order by nlssort(vc,'nls_sort=french_ai');
    select * from tmp order by 1;

  5. #5
    Membre confirmé
    Avatar de argoet
    Inscrit en
    Mai 2002
    Messages
    582
    Détails du profil
    Informations forums :
    Inscription : Mai 2002
    Messages : 582
    Points : 562
    Points
    562
    Par défaut
    Oui j'utilise déjà le "_ai" et "_ci" et ma question est la dessus : je voudrais trouver quelque chose de similaire pour que le "ü" et "ue" via nls_sort donne le meme resultat car en l’état ce n'est pas le cas .
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    Select 'Müller' ,  NLSSORT(UPPER('Müller'),'nls_sort=XGERMAN_AI') from dual  Union
    Select 'Mueller' , NLSSORT(UPPER('Mueller'),'nls_sort=XGERMAN_AI') from dual Union
    Select 'Muller' ,  NLSSORT(UPPER('Muller'),'nls_sort=XGERMAN_AI') from dual
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    Mueller	5073284B4B2864000101010101010100
    Muller	50734B4B28640001010101010100
    Müller	50734B4B28640001010101010100
    Poser différemment : comment obtenir le meme resultat "NLS_SORT" sur les 3 requete ci dessus
    Signé : Capitaine Jean-Luc Picard

  6. #6
    Modérateur
    Avatar de Waldar
    Homme Profil pro
    Customer Success Manager @Vertica
    Inscrit en
    Septembre 2008
    Messages
    8 452
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 46
    Localisation : France, Val de Marne (Île de France)

    Informations professionnelles :
    Activité : Customer Success Manager @Vertica
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Septembre 2008
    Messages : 8 452
    Points : 17 820
    Points
    17 820
    Par défaut
    Un petit Google m'a emmené ici :
    http://www.wer-weiss-was.de/theme165...le2629166.html

    Je ne lis pas l'allemand, mais à la fin il y a cette collation qui regroupe ü et ue, mais pas le u :
    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 SR as
    (
    select 1 as id, 'Müller' as nom from dual union all
    select 2      , 'Mueller'       from dual union all
    select 3      , 'Muller'        from dual
    )
    select id, nom, nlssort(nom, 'nls_sort=XGERMAN_DIN') as tri
      from SR;
     
    ID NOM     TRI                             
    -- ------- --------------------------------
     1 Müller  5073284B4B2864000102030202020200
     2 Mueller 5073284B4B2864000102020202020200
     3 Muller  50734B4B28640001020202020200

  7. #7
    Membre confirmé
    Avatar de argoet
    Inscrit en
    Mai 2002
    Messages
    582
    Détails du profil
    Informations forums :
    Inscription : Mai 2002
    Messages : 582
    Points : 562
    Points
    562
    Par défaut

    Pas mal du tout Waldar
    Je look et vous tient au courant
    Signé : Capitaine Jean-Luc Picard

  8. #8
    Rédacteur

    Homme Profil pro
    Consultant / formateur Oracle et SQL Server
    Inscrit en
    Décembre 2002
    Messages
    3 460
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Var (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Consultant / formateur Oracle et SQL Server

    Informations forums :
    Inscription : Décembre 2002
    Messages : 3 460
    Points : 8 074
    Points
    8 074
    Par défaut
    Citation Envoyé par Waldar Voir le message
    ... il y a cette collation qui regroupe ü et ue

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    ID NOM     TRI                             
    -- ------- --------------------------------
     1 Müller  5073284B4B2864000102030202020200
     2 Mueller 5073284B4B2864000102020202020200
     3 Muller  50734B4B28640001020202020200
    Ton résultat me chiffonnait, car j'avais testé le XGERMAN_DIN sans succès avant de suggérer Oracle Text. Et de fait, ça ne ramène pas le même NLSSORT.
    Consultant / formateur Oracle indépendant
    Certifié OCP 12c, 11g, 10g ; sécurité 11g

    Ma dernière formation Oracle 19c publiée sur Linkedin : https://fr.linkedin.com/learning/oracle-19c-l-administration

  9. #9
    Modérateur
    Avatar de Waldar
    Homme Profil pro
    Customer Success Manager @Vertica
    Inscrit en
    Septembre 2008
    Messages
    8 452
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 46
    Localisation : France, Val de Marne (Île de France)

    Informations professionnelles :
    Activité : Customer Success Manager @Vertica
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Septembre 2008
    Messages : 8 452
    Points : 17 820
    Points
    17 820
    Par défaut
    Bien vu ! Par contre ça fonctionne en accent insensitive :
    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 SR as
    (
    select 1 as id, 'Müller' as nom from dual union all
    select 2      , 'Mueller'       from dual union all
    select 3      , 'Muller'        from dual
    )
    select id, nom, nlssort(nom, 'nls_sort=XGERMAN_DIN_AI') as tri
      from SR;
     
    ID NOM     TRI                             
    -- ------- --------------------------------
     1 Müller  5073284B4B2864000202020202020200
     2 Mueller 5073284B4B2864000202020202020200
     3 Muller  50734B4B28640002020202020200

  10. #10
    Rédacteur

    Homme Profil pro
    Consultant / formateur Oracle et SQL Server
    Inscrit en
    Décembre 2002
    Messages
    3 460
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Var (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Consultant / formateur Oracle et SQL Server

    Informations forums :
    Inscription : Décembre 2002
    Messages : 3 460
    Points : 8 074
    Points
    8 074
    Par défaut
    Effectivement, cette fois c'est probant !!

    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
    alter session set nls_comp=linguistic;
    alter session set nls_sort=xgerman_din_ai;
     
    SQL> WITH SR AS
      2  (
      3  SELECT 1 AS id, 'Müller' AS nom FROM dual union ALL
      4  SELECT 2      , 'Mueller'       FROM dual union ALL
      5  SELECT 3      , 'Muller'        FROM dual
      6  )
      7  SELECT nom from SR where nom='mÜlleR';
     
    NOM
    -------
    Müller
    Mueller
    Consultant / formateur Oracle indépendant
    Certifié OCP 12c, 11g, 10g ; sécurité 11g

    Ma dernière formation Oracle 19c publiée sur Linkedin : https://fr.linkedin.com/learning/oracle-19c-l-administration

  11. #11
    Membre confirmé
    Avatar de argoet
    Inscrit en
    Mai 2002
    Messages
    582
    Détails du profil
    Informations forums :
    Inscription : Mai 2002
    Messages : 582
    Points : 562
    Points
    562
    Par défaut
    Waldar , Pomalaix merci à vous deux
    c'est tout à fait la réponse à mon problème
    Un grand merci à vous
    Cordialement
    @argoet
    Signé : Capitaine Jean-Luc Picard

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

Discussions similaires

  1. [11g] Règles de tri selon NLS_SORT
    Par cappuccino77 dans le forum Débuter
    Réponses: 4
    Dernier message: 03/06/2015, 19h36
  2. [9i, 10g] NLS_SORT=FRENCH_M_AI
    Par JYves dans le forum SQL
    Réponses: 4
    Dernier message: 04/12/2008, 16h46
  3. [9i, débutant] NLS_SORT=FRENCH_M
    Par JYves dans le forum Administration
    Réponses: 6
    Dernier message: 02/04/2008, 16h03

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