Lists: | pgsql-fr-generale |
---|
From: | Yann PICHOT <ypichot(at)gmail(dot)com> |
---|---|
To: | pgsql-fr-generale(at)postgresql(dot)org |
Subject: | Format de date |
Date: | 2010-02-16 08:17:27 |
Message-ID: | 6ff7932d1002160017n48fec8bdhd271bd8402571c5e@mail.gmail.com |
Views: | Raw Message | Whole Thread | Download mbox | Resend email |
Lists: | pgsql-fr-generale |
Bonjour,
Il semblerai qu'il y ait eu une modification dans les formats de date pris
en compte dans les requête SQL entre la version 8.3 et la 8.4.
En 8.3.x les 2 requêtes SQL suivantes passent sans problème :
select * from matable where madate >= '2010-01-31'
select * from matable where madate >= '31/01/2010'
En 8.4 seule la première requête passe sans erreur, l'autre déclenche
l'erreur : ERROR: date/time field value out of range: "31/01/2010".
Dans les 2 cas j'utilise PGAdminIII v1.10.1 (Windows) sur un PostgreSQL
8.3.4 (Linux) et un PostgreSQL 8.4.2 (Windows). Problème constaté aussi sur
un PostgreSQL 8.4.2 Linux.
Les paramètres datestyle du postgres.conf sont dans les 2 cas à 'iso, mdy'.
Je n'ai pas trouvé dans les releases notes des version 8.4, 8.4.1 et 8.4.2
d'information au sujet d'un changement autour du format de date.
Si quelqu'un à une idée, je l'en remercie d'avance.
Cordialement,
--
Yann
From: | François Figarola <francois(dot)figarola(at)i-consult(dot)fr> |
---|---|
To: | Yann PICHOT <ypichot(at)gmail(dot)com> |
Cc: | pgsql-fr-generale(at)postgresql(dot)org |
Subject: | Re: Format de date |
Date: | 2010-02-16 09:16:28 |
Message-ID: | 4B7A626C.7070501@i-consult.fr |
Views: | Raw Message | Whole Thread | Download mbox | Resend email |
Lists: | pgsql-fr-generale |
Yann PICHOT a écrit :
> Bonjour,
Bonjour,
>
> Il semblerai qu'il y ait eu une modification dans les formats de date
> pris en compte dans les requête SQL entre la version 8.3 et la 8.4.
> En 8.3.x les 2 requêtes SQL suivantes passent sans problème :
> select * from matable where madate >= '2010-01-31'
> select * from matable where madate >= '31/01/2010'
Je viens de me livrer à quelques tests avec des PG 8.3 et 8.4
(sous debian) et les deux versions me semblent cohérentes :
Sur chacune des connexions, un SHOW datestyle; me retourne
DateStyle
-----------
ISO, DMY
(1 ligne)
La configuration des serveur permet donc de saisir les dates
soit au format ISO 'YYYY-MM-DD', soit au format européen
'DD-MM-YYYY', ce qui effectivement retourne une erreur si
je saisis une date au format américain (MDY) :
SELECT '10-25-2009'::date;
ERREUR: valeur du champ date/time en dehors des limites : « 10-25-2009 »
alors que SELECT '25-10-2009'::date; SELECT '25/10/2009'::date; ou
SELECT '2009-10-25'::date; me retourne normalement un
date
------------
2009-10-25
(1 ligne)
de bon aloi...
>
> En 8.4 seule la première requête passe sans erreur, l'autre déclenche
> l'erreur : ERROR: date/time field value out of range: "31/01/2010".
Ainsi si votre datestyle est configuré avec 'iso, mdy', il me semble
tout à fait normal que PostgreSQL retourne cette erreur.
>
> Dans les 2 cas j'utilise PGAdminIII v1.10.1 (Windows) sur un
> PostgreSQL 8.3.4 (Linux) et un PostgreSQL 8.4.2 (Windows). Problème
> constaté aussi sur un PostgreSQL 8.4.2 Linux.
> Les paramètres datestyle du postgres.conf sont dans les 2 cas à 'iso,
> mdy'.
Pouvez-vous faire un 'SHOW datestyle' sur chacun des serveurs,
histoire d'en avoir le coeur net ?
A mon sens, utiliser le format ISO reste quand même la meilleure
idée possible pour manipuler des dates...
>
> Je n'ai pas trouvé dans les releases notes des version 8.4, 8.4.1 et
> 8.4.2 d'information au sujet d'un changement autour du format de date.
Il ne me semble également pas avoir vu de release note concernant
le formattage des dates, pas plus que de modification de la page
de doc. concernant la saisie des dates :
http://www.postgresql.org/docs/8.4/static/datetime-input-rules.html
>
> Si quelqu'un à une idée, je l'en remercie d'avance.
Pareil :-))
>
> Cordialement,
> --
> Yann
Cordialement.
--
François Figarola
-- développeur --
=================
INTERNET CONSULT
Mas Guerido
6 rue Aristide Bergès
66330 CABESTANY
Tel 04.68.66.09.29
fax 04.68.66.99.50
* francois(dot)figarola(at)i-consult(dot)fr
From: | Dimitri Fontaine <dfontaine(at)hi-media(dot)com> |
---|---|
To: | Yann PICHOT <ypichot(at)gmail(dot)com> |
Cc: | pgsql-fr-generale(at)postgresql(dot)org |
Subject: | Re: Format de date |
Date: | 2010-02-16 09:47:15 |
Message-ID: | 87635xo6l8.fsf@hi-media-techno.com |
Views: | Raw Message | Whole Thread | Download mbox | Resend email |
Lists: | pgsql-fr-generale |
Yann PICHOT <ypichot(at)gmail(dot)com> writes:
> select * from matable where madate >= '2010-01-31'
> select * from matable where madate >= '31/01/2010'
Dans un prompt interactif, on peut saisir ce genre de choses, c'est
pratique.
Dans du code, on utilise to_date(), systématiquement.
--
dim
From: | "Daniel Verite" <daniel(at)manitou-mail(dot)org> |
---|---|
To: | pgsql-fr-generale(at)postgresql(dot)org |
Subject: | Re: Format de date |
Date: | 2010-02-16 10:07:35 |
Message-ID: | b600d983-a43f-4e51-945f-de623da9526b@mm |
Views: | Raw Message | Whole Thread | Download mbox | Resend email |
Lists: | pgsql-fr-generale |
Yann PICHOT wrote:
> Les paramètres datestyle du postgres.conf sont dans les 2 cas à 'iso, mdy'.
mdy c'est le format américain, il est donc normal que '31/01/2010' soit
rejeté.
Ca le fait aussi sous 8.3:
postgres=# select '31/01/2010'::date;
ERROR: date/time field value out of range: "31/01/2010"
HINT: Perhaps you need a different "datestyle" setting.
postgres=# show datestyle;
DateStyle
-----------
ISO, MDY
(1 row)
postgres=# show server_version;
server_version
----------------
8.3.9
(1 row)
Il faut simplement mettre datestyle à 'ISO,DMY'
Cordialement,
--
Daniel