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

 PostgreSQL Discussion :

Erreur sur une requête basique


Sujet :

PostgreSQL

  1. #1
    Membre régulier
    Inscrit en
    Mai 2006
    Messages
    330
    Détails du profil
    Informations forums :
    Inscription : Mai 2006
    Messages : 330
    Points : 85
    Points
    85
    Par défaut Erreur sur une requête basique
    Salut,

    J'ai une table maTable contenant une colonne "civilite" de type text et la requête suivante me renvoie une erreur :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    SELECT * FROM maTable WHERE civilite="Mme"
    ERROR : column "Mme" does not exist Etat SQL : 42703

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    SELECT * FROM maTable WHERE civilite='Mme'
    ne renvoie rien alors qu'il y a des enregistrements contenant "Mme" quand on fait SELECT civilite FROM maTable

    Par contre je viens de voir que la commande suivante fonctionne :
    Code SQL : Sélectionner tout - Visualiser dans une fenêtre à part
    SELECT * FROM maTable WHERE civilite~'Mme'

    Quel est le problème ? Il y a des caractères cachés ou quoi ?

  2. #2
    Membre émérite
    Profil pro
    Inscrit en
    Octobre 2008
    Messages
    1 874
    Détails du profil
    Informations personnelles :
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Octobre 2008
    Messages : 1 874
    Points : 2 890
    Points
    2 890
    Par défaut
    Que renvoie exactement
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    SELECT civilite,length(civilite) FROM maTable WHERE civilite~'Mme'
    ?

  3. #3
    Membre régulier
    Inscrit en
    Mai 2006
    Messages
    330
    Détails du profil
    Informations forums :
    Inscription : Mai 2006
    Messages : 330
    Points : 85
    Points
    85
    Par défaut
    Que renvoie exactement
    Code sql : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    SELECT civilite,length(civilite) FROM maTable WHERE civilite~'Mme'
    Bonne idée, que je n'avais pas eue étant donnée que je débute. Le résultat est surprenant car ça renvoie "5" en face de toutes les colonnes "Mme". Je me demande si je n'aurais pas importé des caractères cachés par méconnaissance des règles d'importation.

    Mon fichier source extrait.txt contient des champs texte qui sont tous entre guillemets (par exemple "Mme") et séparés par des tabulations. Je l'ai importé avec la commande :

    Code SQL : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    COPY maTable FROM extrait.txt

  4. #4
    Membre régulier
    Inscrit en
    Mai 2006
    Messages
    330
    Détails du profil
    Informations forums :
    Inscription : Mai 2006
    Messages : 330
    Points : 85
    Points
    85
    Par défaut
    Que renvoie exactement
    Code sql : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    SELECT civilite,length(civilite) FROM maTable WHERE civilite~'Mme'
    Bonne idée, que je n'avais pas eue étant donné que je débute. Le résultat est surprenant car ça renvoie "5" en face de toutes les colonnes "Mme". Je me demande si je n'aurais pas importé des caractères cachés par méconnaissance des règles d'importation.

    Mon fichier source extrait.txt contient des champs texte qui sont tous entre guillemets (par exemple "Mme") et séparés par des tabulations. Je l'ai importé avec la commande :

    Code SQL : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    COPY maTable FROM extrait.txt

  5. #5
    Membre émérite
    Profil pro
    Inscrit en
    Octobre 2008
    Messages
    1 874
    Détails du profil
    Informations personnelles :
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Octobre 2008
    Messages : 1 874
    Points : 2 890
    Points
    2 890
    Par défaut
    dans COPY, les guillemets sont considérés comme des caractères normaux et non comme des marqueurs entourant la valeur. Donc Mme plus des guillemets autour, ça fait bien 5 caractères.
    Ca semble coller aussi avec ton premier message où tu dis:
    il y a des enregistrements contenant "Mme"
    Je note qu'il y a des guillemets autour de Mme.
    Si c'est bien ça le problème, enlève les guillemets à la source, ou si ce n'est pas possible a posteriori avec un UPDATE.
    Si ce n'est pas ça et que ce sont des caractères cachés (possible aussi), ça peut être montré avec une requête qui affiche la valeur de chaque caractère de la chaine, un par un.

  6. #6
    Membre régulier
    Inscrit en
    Mai 2006
    Messages
    330
    Détails du profil
    Informations forums :
    Inscription : Mai 2006
    Messages : 330
    Points : 85
    Points
    85
    Par défaut
    Oui c'est exactement ça, la commande suivante fonctionne :

    Code SQL : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    SELECT * FROM maTable WHERE civilite='\"Mme\"'

    Juste par curiosité ce serait quoi la commande qui permettrait de remplacer tous les champs textes de ma table encadrés par des guillemets par la même chose sans guillemets ?

  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 770
    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 770
    Points : 52 726
    Points
    52 726
    Billets dans le blog
    5
    Par défaut
    UPDATE.

    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 émérite
    Profil pro
    Inscrit en
    Octobre 2008
    Messages
    1 874
    Détails du profil
    Informations personnelles :
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Octobre 2008
    Messages : 1 874
    Points : 2 890
    Points
    2 890
    Par défaut
    Remplace les apostrophes par chaine vide, tout simplement
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    update table set civilite = replace( civilite, '"', '');

Discussions similaires

  1. Réponses: 8
    Dernier message: 23/01/2020, 09h34
  2. [MySQL] erreur sur une requète
    Par mattyeux dans le forum PHP & Base de données
    Réponses: 1
    Dernier message: 20/01/2008, 21h25
  3. [SQL] Erreur sur une requète avec un Like
    Par heruwenli dans le forum PHP & Base de données
    Réponses: 1
    Dernier message: 30/05/2007, 14h29
  4. [VBA] Erreur sur une requête avec un opérateur
    Par elgringo2007 dans le forum Requêtes et SQL.
    Réponses: 2
    Dernier message: 03/07/2006, 17h12
  5. Réponses: 8
    Dernier message: 01/03/2005, 16h01

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