Re: Question de dates

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

In response to

Responses

Browse pgsql-fr-generale by date

  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