From: | Jean-Paul Argudo <jean-paul(at)postgresqlfr(dot)org> |
---|---|
To: | stephane+pgfr(at)bpf(dot)st |
Cc: | pgsql-fr-generale(at)postgresql(dot)org |
Subject: | Re: Question de dates |
Date: | 2008-07-15 08:45:14 |
Message-ID: | 487C639A.1040608@postgresqlfr.org |
Views: | Raw Message | Whole Thread | Download mbox | Resend email |
Thread: | |
Lists: | pgsql-fr-generale |
Ok!
J'ai effectivement reproduit ton "bug" avec le 14/07/2008 comme date de
référence.
Suite à ça, 'RhodiumToad' sur l'IRC (irc.freenode.net, canal
#postgresql), m'a donné l'explication de ce comportement "curieux".
En fait, il ne s'agit pas du tout d'un bug, mais d'un comportement
induit par la fonction age().
age() renvoie une valeur "symbolique" exprimant la différence temporelle
entre deux dates.
Cependant, la sortie de cette fonction perd toute notion de la valeur
précise de la longueur des intervalles une fois qu'elles sont exprimées
en unités absolues (mois, jours, heures..).
Ainsi, entre '1 mon 30 days 03:54' et '2 mons 03:53', c'est le 1er qui
est plus grand, d'une seule minute.
1 mois et 30 jours et 2 mois, c'est en effet identique, avec les unités
considérées.
Avec age(), il n'y a plus de comparaison possible qui conserverait
l'ordre original...
Au final, si tu veux que ton ORDER BY soit correct, il ne faut pas
utiliser age() mais la différence avec CURRENT_TIMESTAMP, comme le
montre cet exemple:
http://pgsql.privatepaste.com/0faaP3uV6c
(timestamp-timestamp) conserve en effet tous les détails.
J'espère avoir été clair...
Merci en tout cas pour avoir soulevé ce point :)
Bonne journée,
--
Jean-Paul Argudo
www.PostgreSQLFr.org
www.Dalibo.com
From | Date | Subject | |
---|---|---|---|
Next Message | Stéphane Bunel | 2008-07-15 09:16:23 | Re: Question de dates |
Previous Message | Stéphane Bunel | 2008-07-15 07:20:44 | Re: Question de dates |