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 :

Identifier un caractère spécial


Sujet :

SQL Oracle

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre confirmé
    Homme Profil pro
    Développeur
    Inscrit en
    Juin 2009
    Messages
    171
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Développeur
    Secteur : Santé

    Informations forums :
    Inscription : Juin 2009
    Messages : 171
    Par défaut Identifier un caractère spécial
    Bonjour tout le monde,

    Je fais appel aux spécialistes oracle ou a tout ceux qui auront une idée lumineuse pour m'éclairer !

    J'ai un enregistrement qui me pose problème dans mes traitements, avec un caractère non identifié qui est présent et qui est visible sous SQL Developer sous la forme d'un espace.
    Exemple :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    SELECT nom
    FROM matable
    WHERE nopartenaire = 6355914
    Me retourne : S ilva (tient, d'ailleurs, quand je copie ici, je vois ceci : Silva)

    Je n'arrive pas à savoir quel est ce caractère et comment l'identifier pour pouvoir le traiter.

    Quelqu'un aurait une idée ?

    Juste pour être sur que ce ne soit pas un espace, quand je fais :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    SELECT REPLACE(nom, '', '') AS check_name
    FROM matable
    WHERE nopartenaire = 6355914
    J'obtiens bien toujours l'espace affiché dans SQL developer

    Merci à vous pour votre aide !

  2. #2
    Membre Expert
    Homme Profil pro
    Administrateur de base de données
    Inscrit en
    Avril 2013
    Messages
    2 005
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Administrateur de base de données
    Secteur : High Tech - Produits et services télécom et Internet

    Informations forums :
    Inscription : Avril 2013
    Messages : 2 005
    Par défaut
    Je te propose d'utiliser les fonctions DUMP et CHR sur ton champ.

    La fonction DUMP te renverra les codes ASCII de ta chaîne de caractère et avec CHR tu pourras afficher le caractère retourné par DUMP (on verra si c'est aussi simple que ça ).

    Exemple avec les caractères & et " : leur code est 38 et 34 renvoyé par DUMP. Et, avec CHR, on voit bien que le code 38 correspond à &.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    SQL> select dump('&"') from dual;
    DUMP('&"')
    -------------------
    Typ=96 Len=2: 38,34
     
    SQL> select chr(38) from dual;
    C
    -
    &
    Que te retourne le code suivant ?
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    SELECT DUMP(nom), nom 
    FROM matable
    WHERE nopartenaire = 6355914;

  3. #3
    Modérateur
    Avatar de al1_24
    Homme Profil pro
    Retraité
    Inscrit en
    Mai 2002
    Messages
    9 135
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 64
    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 135
    Par défaut
    S'il s'agit bien du second caractère du nom comme tu l'as identifié, tu peux en savoir plus avec par exemple :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    SELECT ASCII(SUBSTR(nom, 2, 1)) AS code_errone
    FROM    matable
    WHERE nopartenaire = 6355914
    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 confirmé
    Homme Profil pro
    Développeur
    Inscrit en
    Juin 2009
    Messages
    171
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Développeur
    Secteur : Santé

    Informations forums :
    Inscription : Juin 2009
    Messages : 171
    Par défaut
    Merci à tous les 2 pour votre aide !

    Alors, le DUMP me retourne ceci :
    Typ=1 Len=6: 83,30,105,108,118,97

    Et le ASCII(SUBSTR) me retourne le code 30.

    En allant essayer de retrouver à quoi ca correspond dans une table ASCII, ce caractère est nommé RS (Record Separator).

    Ca m'avance déjà pas mal, je vais voir si je trouve un moyen de lui dire d'aller voir ailleurs !

    Mon problème n'est pas dans la requête, mais derrière je génère un fichier XML avec ce nom, et l'application qui lit ce fichier me fait planter le tout avec ce caractère.

    Surtout, ce caractère n'a pas grand chose à faire ici je suppose.


    Edit :
    Du coup, un REPLACE('Silva', CHR(30), '') me donne bien le résultat souhaité ! Merci à tous les 2, si vous avez une idée de comment faire plus proprement je suis preneur mais déjà ca me débloque, grand merci

  5. #5
    Membre Expert
    Homme Profil pro
    Administrateur de base de données
    Inscrit en
    Avril 2013
    Messages
    2 005
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Administrateur de base de données
    Secteur : High Tech - Produits et services télécom et Internet

    Informations forums :
    Inscription : Avril 2013
    Messages : 2 005
    Par défaut
    Si REPLACE('Silva', CHR(30), '') résoud ton problème c'est cool.

    Pour que ce soit plus propre, il faut voir comment est alimenté ta table et identifier le programme ou la saisie manuelle qui ajoute ce code (un plaisantin qui fait un copier/coller?).
    En tout cas ta table est mal alimentée, il faut corriger ça en amont si c'est possible. Si c'est impossible, essaye un trigger before ou after insert/update en y mettant le replace que tu as trouvé pour corriger les données mais cela risque de rajouter un peu de travail à ta base.

  6. #6
    Membre confirmé
    Homme Profil pro
    Développeur
    Inscrit en
    Juin 2009
    Messages
    171
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Développeur
    Secteur : Santé

    Informations forums :
    Inscription : Juin 2009
    Messages : 171
    Par défaut
    Done, j'ai demandé à qui de droit de modifier tout ça en base et surtout d'éviter de nous la refaire !
    Oui, je suppose que quelqu'un s'est planté lors de l'insertion en base.

    Encore merci pour vos éclaircissements et votre réactivité !

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

Discussions similaires

  1. [RegEx] Identifier un caractère spécial
    Par renaud26 dans le forum Langage
    Réponses: 0
    Dernier message: 17/04/2015, 10h04
  2. [XML] caractères spécial
    Par nemya dans le forum Valider
    Réponses: 1
    Dernier message: 20/12/2005, 12h53
  3. Réponses: 2
    Dernier message: 06/11/2005, 11h11
  4. Pb masquer caractère spécial
    Par cosminutza dans le forum Balisage (X)HTML et validation W3C
    Réponses: 4
    Dernier message: 04/11/2004, 11h27

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