Précédent   Forum des professionnels en informatique > Bases de données > PostgreSQL
PostgreSQL Forum PostgreSQL. Avant de poster -> F.A.Q PostGreSQL Tutoriels PostGreSQL
Partagez cette discussion sur d'autres réseaux sociaux : Viadeo Twitter Google Facebook Digg Delicious MySpace Yahoo
Réponse Proposer ce sujet en actualité
 
Outils de la discussion
Publicité
'
Vieux 22/10/2007, 12h09   #1
Membre à l'essai
 
Inscription : février 2007
Messages : 91
Détails du profil
Informations personnelles :
Âge : 46

Informations forums :
Inscription : février 2007
Messages : 91
Points : 23
Points : 23
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 :
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 :
1
2
3
4
SELECT matable.ladate, matable.nom
FROM public.matable 
WHERE matable.ladate >= '20071001'
	AND matable.ladate <= '20071030'
Rocou est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 22/10/2007, 14h10   #2
Membre habitué
 
Inscription : août 2007
Messages : 128
Détails du profil
Informations forums :
Inscription : août 2007
Messages : 128
Points : 146
Points : 146
Quelle version de PG utilises-tu ? Quel est le type de la colonne la_date ? un cast est certainement nécessaire.
gleu_ est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 22/10/2007, 14h20   #3
Membre à l'essai
 
Inscription : février 2007
Messages : 91
Détails du profil
Informations personnelles :
Âge : 46

Informations forums :
Inscription : février 2007
Messages : 91
Points : 23
Points : 23
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
Rocou est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 22/10/2007, 15h04   #4
Membre habitué
 
Inscription : août 2007
Messages : 128
Détails du profil
Informations forums :
Inscription : août 2007
Messages : 128
Points : 146
Points : 146
À 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).
gleu_ est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 22/10/2007, 15h35   #5
Membre à l'essai
 
Inscription : février 2007
Messages : 91
Détails du profil
Informations personnelles :
Âge : 46

Informations forums :
Inscription : février 2007
Messages : 91
Points : 23
Points : 23
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 :
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.
Rocou est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 22/10/2007, 15h51   #6
Membre habitué
 
Inscription : août 2007
Messages : 128
Détails du profil
Informations forums :
Inscription : août 2007
Messages : 128
Points : 146
Points : 146
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 :
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.
gleu_ est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 22/10/2007, 16h35   #7
Membre à l'essai
 
Inscription : février 2007
Messages : 91
Détails du profil
Informations personnelles :
Âge : 46

Informations forums :
Inscription : février 2007
Messages : 91
Points : 23
Points : 23
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 :
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
Rocou est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 22/10/2007, 18h59   #8
Membre à l'essai
 
Inscription : février 2007
Messages : 91
Détails du profil
Informations personnelles :
Âge : 46

Informations forums :
Inscription : février 2007
Messages : 91
Points : 23
Points : 23
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é...
Rocou est déconnecté   Envoyer un message privé Réponse avec citation 00
Réponse Proposer ce sujet en actualité Cette discussion est résolue.
Outils de la discussion



Fuseau horaire GMT +2. Il est actuellement 06h51.


 
 
 
 
Partenaires

Hébergement Web