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

DB2 Discussion :

Lister caractères non visibles en sql


Sujet :

DB2

  1. #1
    Membre du Club
    Homme Profil pro
    Chef de projet en SSII
    Inscrit en
    Mars 2015
    Messages
    98
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 53
    Localisation : France, Seine et Marne (Île de France)

    Informations professionnelles :
    Activité : Chef de projet en SSII

    Informations forums :
    Inscription : Mars 2015
    Messages : 98
    Points : 69
    Points
    69
    Par défaut Lister caractères non visibles en sql
    Bonjour,
    J'ai une table dont certains champs ne sont pas visibles mais qui me font planter un traitement.
    Je ne le vois qu'en faisant un DSPPFM , il apparaît un '?' ou un carré en surbrillance; mais que je ne les vois pas par sql .

    Serait il possible de faire un SQL pour les lister?

    Merci!

  2. #2
    Modérateur
    Avatar de escartefigue
    Homme Profil pro
    bourreau
    Inscrit en
    Mars 2010
    Messages
    10 134
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Loir et Cher (Centre)

    Informations professionnelles :
    Activité : bourreau
    Secteur : Finance

    Informations forums :
    Inscription : Mars 2010
    Messages : 10 134
    Points : 38 557
    Points
    38 557
    Billets dans le blog
    9
    Par défaut
    bonjour,

    Pour visualiser le contenu des colonnes (et non pas des champs ) concernées, vous pouvez utiliser SELECT HEX(ma_colonne) FROM ma_table.

  3. #3
    Membre du Club
    Homme Profil pro
    Chef de projet en SSII
    Inscrit en
    Mars 2015
    Messages
    98
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 53
    Localisation : France, Seine et Marne (Île de France)

    Informations professionnelles :
    Activité : Chef de projet en SSII

    Informations forums :
    Inscription : Mars 2015
    Messages : 98
    Points : 69
    Points
    69
    Par défaut
    Merci mais c'est une instruction qui transforme en hexa la valeur de ma colonne
    Je cherche à nettoyer la base et je pensais que l'instruction translate pouvait le faire.
    Mais ça coince

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    SELECT  TRANSLATE(monchamp , ' '   , x'00') from matable
    c'est le 3 ieme prédicat qui pose pbm . Je ne sais pas comment faire pour remplacer par un espace l'hexa x'00'.

    Une idée?

  4. #4
    Membre du Club
    Homme Profil pro
    Chef de projet en SSII
    Inscrit en
    Mars 2015
    Messages
    98
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 53
    Localisation : France, Seine et Marne (Île de France)

    Informations professionnelles :
    Activité : Chef de projet en SSII

    Informations forums :
    Inscription : Mars 2015
    Messages : 98
    Points : 69
    Points
    69
    Par défaut
    Je pense avoir trouvé. En tous les cas ça marche our un code hexa.
    je suis passé par une expression régulière

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    SELECT monchamp ,regexp_replace(monchamp, '\00', 'x') from mytable
    Une fois exécuté j'ai bien un x qui apparaît à l'endroit ou se trouve mon hexa x'00'
    Je le remplace par ' ' et c'est bon.

    C'est encore à creuser. Le lien ci-dessous qui m'a permis de trouver une solution.
    Après un sql par code hexa c'est un peu galère


    https://www.volubis.fr/news/liens/courshtm/SQL/SQL1.htm

  5. #5
    Membre du Club
    Homme Profil pro
    Chef de projet en SSII
    Inscrit en
    Mars 2015
    Messages
    98
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 53
    Localisation : France, Seine et Marne (Île de France)

    Informations professionnelles :
    Activité : Chef de projet en SSII

    Informations forums :
    Inscription : Mars 2015
    Messages : 98
    Points : 69
    Points
    69
    Par défaut
    Après qq test il faut mettre s(minucule) ou W sinon selon on a des caractères qui sautent

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    SELECT monchamp,regexp_replace(monchamp, '[\s]', ' ') FROM mytable
    pour exemple

    \w tout caractère alpha ou numérique (pouvant constituer un mot)
    \W tout sauf caractère alpha ou numérique
    \d un chiffre
    \D tout sauf un chiffre
    \s caractère espace
    \S tout sauf un espace

    Mais on peut aussi combiner
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    SELECT monchamp,regexp_replace(monchamp, '[\d+\s]', ' ') FROM mytable
    A+

  6. #6
    Membre régulier
    Profil pro
    Inscrit en
    Octobre 2008
    Messages
    55
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2008
    Messages : 55
    Points : 75
    Points
    75
    Par défaut
    Citation Envoyé par totofff78 Voir le message
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    SELECT  TRANSLATE(monchamp , ' '   , x'00') from matable
    c'est le 3 ieme prédicat qui pose pbm . Je ne sais pas comment faire pour remplacer par un espace l'hexa x'00'.
    Je ne comprends pas pourquoi vous dites que translate ne le fait pas, la requête ci-dessus retourne monchamp où tous les x'00' ont été remplacé par des x'40'
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    SELECT hex(TRANSLATE(x'00' , ' ', x'00')) resultat from sysibm.sysdummy1
    |--------|
    |40      |
    Si vous voulez remplacer plusieurs caractères par des blancs d'une instruction vous pouvez faire comme ceci

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    with jeu_de_test (valeur) as (values (x'00'), (x'F000F101F202F303'))
    SELECT hex(valeur), hex(TRANSLATE(valeur , ' ', x'00010203', ' ')) from jeu_de_test
     
    |------------------|------------------|
    |0000              |4040              |
    |F000F101F202F30300|F040F101F202F30340|
    Si les données sont nombreuses je pense que c'est plus rapide qu'une expression régulière

    Attention cependant à des caractères comme la tabulation x'05', CRt x'0d' et LF x'25' qui ne sont peut être pas à remplacer si par exemple il y a une appli web qui accède à la table

    Je dis ça parce que dans les expressions régulière \s sélectionne ces caractères, donc si vous faite monchamp,regexp_replace(monchamp, '[\s]', ' ') vous remplacez les blancs par des blans et les tabulations par des blancs et les saut de lignes par des blancs

    Dernière chose, en expression régulière [\d+\s] ne signifie pas un chiffre ou un espace mais un chiffre ou un caractère '+' ou un espace

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

Discussions similaires

  1. [PL/SQL] Supprimer les caractères non numériques
    Par Oliveuh dans le forum PL/SQL
    Réponses: 6
    Dernier message: 25/06/2015, 12h13
  2. [BI4] Filtre non visible dans sql généré
    Par nabou dans le forum Launchpad (ex-Infoview)
    Réponses: 1
    Dernier message: 13/05/2013, 13h47
  3. Remplacer un caractère non visible
    Par lamaison dans le forum Requêtes
    Réponses: 0
    Dernier message: 16/09/2009, 23h15
  4. [SQL-2005] Rechercher des caractères non numériques
    Par castaka dans le forum MS SQL Server
    Réponses: 2
    Dernier message: 03/05/2007, 11h12
  5. SQL et GUID : Valeur de caractère non valide pour la ....
    Par jackfirst72 dans le forum Bases de données
    Réponses: 5
    Dernier message: 06/03/2007, 10h46

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