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 :

selection sur date


Sujet :

PostgreSQL

  1. #1
    Membre du Club
    Inscrit en
    Février 2007
    Messages
    97
    Détails du profil
    Informations personnelles :
    Âge : 58

    Informations forums :
    Inscription : Février 2007
    Messages : 97
    Points : 56
    Points
    56
    Par défaut selection sur date
    En tentant de passer des paramètres à ma commande SQL, je m'aperçois que ma selection sur date ne fonctionne plus. La requête fait bien une sélection mais qui ne correspond pas à ce qui doit être sélectionné. Voici mon code:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    \pset format unaligned
    \pset fieldsep ,
    \pset recordsep '\n'
    \pset title "Récap détaillé"
     
    \set datedebut '20071001'
    \set datefin '20071030'
     
     
    SELECT matable.ladate, matable.nom
    FROM public.matable 
    WHERE matable.ladate >= :datedebut
    	AND matable.ladate <= :datefin
    En "direct", cela fonctionne pourtant très bien. Code:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    SELECT matable.ladate, matable.nom
    FROM public.matable 
    WHERE matable.ladate >= '20071001'
    	AND matable.ladate <= '20071030'

  2. #2
    Membre habitué
    Profil pro
    Inscrit en
    Août 2007
    Messages
    128
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2007
    Messages : 128
    Points : 143
    Points
    143
    Par défaut
    Quelle version de PG utilises-tu ? Quel est le type de la colonne la_date ? un cast est certainement nécessaire.

  3. #3
    Membre du Club
    Inscrit en
    Février 2007
    Messages
    97
    Détails du profil
    Informations personnelles :
    Âge : 58

    Informations forums :
    Inscription : Février 2007
    Messages : 97
    Points : 56
    Points
    56
    Par défaut
    Citation Envoyé par gleu_ Voir le message
    Quelle version de PG utilises-tu ? Quel est le type de la colonne la_date ? un cast est certainement nécessaire.
    Alors,
    La version de PG est la 7.3
    la_date est de type date

  4. #4
    Membre habitué
    Profil pro
    Inscrit en
    Août 2007
    Messages
    128
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2007
    Messages : 128
    Points : 143
    Points
    143
    Par défaut
    À moins d'avoir configuré un DateStyle particulier, cette valeur ne peut pas fonctionner. Malheureusement, PostgreSQL essaie d'interpréter la valeur qui semble de type date. Donc, ça pourrait fonctionner quelque fois... mais pas toujours.

    Donc, deux possibilités de solution :
    1. configure DateStyle pour qu'il représente ta façon d'écrire une date
    2. écrit une date au format reconnu par PostgreSQL (à savoir AAAA-MM-JJ entre guillemets).

  5. #5
    Membre du Club
    Inscrit en
    Février 2007
    Messages
    97
    Détails du profil
    Informations personnelles :
    Âge : 58

    Informations forums :
    Inscription : Février 2007
    Messages : 97
    Points : 56
    Points
    56
    Par défaut
    Citation Envoyé par gleu_ Voir le message
    2. écrit une date au format reconnu par PostgreSQL (à savoir AAAA-MM-JJ entre guillemets).
    ça, j'ai essayé puisque selon la doc, c'est un format toujours reconnu quelque soit le "datestyle". Mais hélas, ça ne fonctionne pas non plus. (zéro enregistrement sélectionné)

    Je me demande si l'erreur n'est pas à ce niveau:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    \SET datedebut '2007-10-01'
    \SET datefin '2007-10-31'
    psql veut-il des quotes, des guillemets ou autre chose?
    Avec PGAdmin, je mets des quotes.
    Est-ce le \SET qui n'admet ni les quotes, ni les guillements? Faut-il les "échapper"? Comment?

    EDIT: J'ai trouvé.
    Il s'agissait bien d'échapper les quotes. Cela se fait de la façon suivante:
    '\'2007-10-01\''

    Merci pour ton aide.

  6. #6
    Membre habitué
    Profil pro
    Inscrit en
    Août 2007
    Messages
    128
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2007
    Messages : 128
    Points : 143
    Points
    143
    Par défaut
    Pour éviter l'échappement (qui est toujours chiant car difficile à lire), peut-être peux-tu ajouter les guillemets dans la requête, ie de cette façon :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    SELECT matable.ladate, matable.nom
    FROM public.matable 
    WHERE matable.ladate >= ':datedebut'
    	AND matable.ladate <= ':datefin'
    en laissant le SET comme auparavant.

  7. #7
    Membre du Club
    Inscrit en
    Février 2007
    Messages
    97
    Détails du profil
    Informations personnelles :
    Âge : 58

    Informations forums :
    Inscription : Février 2007
    Messages : 97
    Points : 56
    Points
    56
    Par défaut
    Citation Envoyé par gleu_ Voir le message
    Pour éviter l'échappement (qui est toujours chiant car difficile à lire), peut-être peux-tu ajouter les guillemets dans la requête, ie de cette façon :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    SELECT matable.ladate, matable.nom
    FROM public.matable 
    WHERE matable.ladate >= ':datedebut'
    	AND matable.ladate <= ':datefin'
    en laissant le SET comme auparavant.
    ça serait bien mais pour le coup, cela ne peut pas fonctionner car alors :datedebut et :datefin sont considérés comme des chaines de caractères et non des variables.

    Cela dit, tu as raison pour l'échappement car j'appelle ma requête SQL dans un script shell lui même appelé par un script AppleScript avec chacun des caractères d'échappement qui leur sont propres! Suis pas sorti de l'auberge

  8. #8
    Membre du Club
    Inscrit en
    Février 2007
    Messages
    97
    Détails du profil
    Informations personnelles :
    Âge : 58

    Informations forums :
    Inscription : Février 2007
    Messages : 97
    Points : 56
    Points
    56
    Par défaut
    Citation Envoyé par Rocou Voir le message
    Suis pas sorti de l'auberge
    Bon, finalement j'ai trouvé les bons échappements, j'y ai passé une demi-journée, ouf!

    Tout fonctionne, j'ai donc une application AppleScript qui gère une interface Cocoa qui elle-même effectue des requêtes SQL dans une base PostgreSQL.
    Et tout cela avec des produits gratuits...

    Ne pas hésiter à me contacter si intéressé...

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

Discussions similaires

  1. select sur date
    Par gilles974 dans le forum Requêtes
    Réponses: 2
    Dernier message: 29/11/2010, 10h28
  2. Requete Selection Sur Date
    Par otaquet dans le forum Requêtes et SQL.
    Réponses: 1
    Dernier message: 28/11/2006, 11h57
  3. requete selection sur date
    Par otaquet dans le forum Access
    Réponses: 24
    Dernier message: 25/10/2006, 10h36
  4. [Conception] Select sur date inopérant
    Par lodan dans le forum PHP & Base de données
    Réponses: 2
    Dernier message: 11/09/2006, 09h33

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