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 :

différencier caractères romains des caractères chinois


Sujet :

SQL Oracle

  1. #1
    Membre à l'essai
    Inscrit en
    Janvier 2007
    Messages
    32
    Détails du profil
    Informations personnelles :
    Âge : 41

    Informations forums :
    Inscription : Janvier 2007
    Messages : 32
    Points : 22
    Points
    22
    Par défaut différencier caractères romains des caractères chinois
    Bonjour à tous,

    j'ai dans une table de traduction des champs contenant à la fois des libellés en anglais et en chinois. On a donc un mélange de caractères romains et de caractères chinois.
    ex:
    11 短 short trousers
    23 中长 medium long skirt
    881 short-短款
    ...

    Je souhaiterais ne récupérer que la chaîne de caractère en caractères romains.
    Malheureusement, il n'y a pas de règle de séparation entre le libellé en anglais et celui en chinois (parfois séparé par un '/', parfois par un '-', parfois l'anglais est avant le chinois....)

    Est-ce que quelqu'un connaitrait une fonction ou aurait une idée afin que je puisse différencier les 2 écritures ?

    Merci d'avance pour votre aide.

    Pierre

  2. #2
    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
    Quelle est votre version ?

  3. #3
    Membre à l'essai
    Inscrit en
    Janvier 2007
    Messages
    32
    Détails du profil
    Informations personnelles :
    Âge : 41

    Informations forums :
    Inscription : Janvier 2007
    Messages : 32
    Points : 22
    Points
    22
    Par défaut
    Bonjour,

    Je suis en 9.2.

    Merci

  4. #4
    Membre averti Avatar de xdescamp
    Homme Profil pro
    Inscrit en
    Octobre 2008
    Messages
    300
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 48
    Localisation : France, Nord (Nord Pas de Calais)

    Informations professionnelles :
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Octobre 2008
    Messages : 300
    Points : 442
    Points
    442
    Par défaut
    Il me semble que dans le cas d'une base en UTF-8, les caractères spéciaux sont effectivement stockés sur 2 octets alors que la plupart des caractères courants ne le sont que sur 1 octet.
    Du coup, en utilisant la fonction LENGTHB(...), il y a peut-être moyen de faire une fonction qui retirerait les caractères chinois.

  5. #5
    Membre à l'essai
    Inscrit en
    Janvier 2007
    Messages
    32
    Détails du profil
    Informations personnelles :
    Âge : 41

    Informations forums :
    Inscription : Janvier 2007
    Messages : 32
    Points : 22
    Points
    22
    Par défaut
    Effectivement vous avez raison, les caractères chinois sont codés sur 2 octets.

    Du coup, contre mauvaise fortune bon coeur, je contrôle chaque caractère et si celui-ci n'est pas un caractère romain, je ne renvoie rien :

    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
     
    select test1||test2||...||test20
    from(
    select
    case when SUBSTR(codefamille,1,1) not in ('a','b','c','d','e','f','g','h','i','j','k','l','m'
    ,'n','o','p','q','r','s','t','u','v','w','x','y','z','A','B','C','D','E','F','G','H','I','J','K','L','M'
    ,'N','O','P','Q','R','S','T','U','V','W','X','Y','Z','1','2','3','4','5','6','7','8','9',' ','-','/') then ''
    else  SUBSTR(libclassprod3,1,1)
    end as test1
    ,
    case when SUBSTR(codefamille,2,1) not in('a','b','c','d','e','f','g','h','i','j','k','l','m'
    ,'n','o','p','q','r','s','t','u','v','w','x','y','z','A','B','C','D','E','F','G','H','I','J','K','L','M'
    ,'N','O','P','Q','R','S','T','U','V','W','X','Y','Z','1','2','3','4','5','6','7','8','9',' ','-','/') then ''
    else  SUBSTR(libclassprod3,2,1)
    end as test2
    ,
    ...
    ,
    case when SUBSTR(codefamille,20,1) not in ('a','b','c','d','e','f','g','h','i','j','k','l','m'
    ,'n','o','p','q','r','s','t','u','v','w','x','y','z','A','B','C','D','E','F','G','H','I','J','K','L','M'
    ,'N','O','P','Q','R','S','T','U','V','W','X','Y','Z','1','2','3','4','5','6','7','8','9',' ','-','/') then ''
    else  SUBSTR(codefamille,20,1)
    end as test20
    from famille
    where codefamille=234)
    Si quelqu'un a une meilleure solution, je suis preneur

    merci bien

  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
    Vous pouvez je pense vous inspirer de ce sujet pour trouver une solution plus efficace :
    http://www.developpez.net/forums/d82...cherche-texte/

  7. #7
    Invité
    Invité(e)
    Par défaut
    Avec ta solution, tu zappes les caractères accentués.
    Est-ce que les caractères chinois ne sont pas dans un range particulier dans les codes ascii ? Ça serait plus simple à vérifier.

    Je me souviens d'un problème dans un enregistrement du à un espace "japonnais" qui n'avait pas le même code ascii qu'un espace "standard"... Pour trouver ça, ça avait pris du temps...

  8. #8
    Membre à l'essai
    Inscrit en
    Janvier 2007
    Messages
    32
    Détails du profil
    Informations personnelles :
    Âge : 41

    Informations forums :
    Inscription : Janvier 2007
    Messages : 32
    Points : 22
    Points
    22
    Par défaut
    j'ai essayé la fonction translate, c'est très efficace sauf pour quelques idéogrammes, je n'ai aucune idée pourquoi ???

    En fait, je n'ai pas à gérer les caractères accentués puisque les libellés sont en anglais et chinois. Par contre, si j'utilise la fonction ASCII, je vais me retrouver dans le même cas qu'avec SUBSTR à savoir je vais devoir tester caractère par caractère et non une chaine de plusieurs caractères.

    En tout cas, merci de votre aide.

  9. #9
    Invité
    Invité(e)
    Par défaut
    Citation Envoyé par pierre.coudert Voir le message
    En fait, je n'ai pas à gérer les caractères accentués puisque les libellés sont en anglais et chinois. Par contre, si j'utilise la fonction ASCII, je vais me retrouver dans le même cas qu'avec SUBSTR à savoir je vais devoir tester caractère par caractère et non une chaine de plusieurs caractères.
    Il n’est pas rare de rencontrer des caractères accentués en anglais du à des emprunts dans d’autres langues coMme l’expression « à la » par exemple…
    Pour ce qui est du code ascii, je pensais que les idéogrammes chinois étaient dans une fourchette précise mais c’est à confirmer…

Discussions similaires

  1. [RegEx] Remplacer des caractères par des images
    Par moudhakir dans le forum Langage
    Réponses: 2
    Dernier message: 21/06/2009, 14h06
  2. script pour remplacer des caractères par des blancs
    Par floctc dans le forum Langage
    Réponses: 5
    Dernier message: 03/06/2009, 16h44
  3. [Artichow] Caractères accentués des légendes
    Par tiantian dans le forum Bibliothèques et frameworks
    Réponses: 8
    Dernier message: 19/07/2007, 16h18
  4. [Remplacer des caractères spéciaux en caractères normaux]
    Par metalamania dans le forum Général Python
    Réponses: 2
    Dernier message: 23/02/2007, 16h18
  5. Réponses: 5
    Dernier message: 21/01/2007, 00h43

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