PostgreSQL
 sql >> Base de données >  >> RDS >> PostgreSQL

Extraire le jour de la semaine, la milliseconde, la microseconde, la nanoseconde d'une date dans Postgres

Je ne sais pas quel équivalent recherchez-vous, mais :

  • il n'y a pas de précision à la nanoseconde dans PostgreSQL :La plage autorisée de p (précision) est de 0 à 6 pour le timestamp et interval type.
  • certaines parties de date en incluent d'autres :par exemple, milliseconds contient seconds &microseconds contient milliseconds (et donc seconds aussi).

Si vous recherchez des valeurs logiquement séparées, vous devrez faire quelques calculs, par exemple :

select extract(dow from ts) dow,       -- day-of-week (where weeks start on sunday, which is 0)
       extract(isodow from ts) isodow, -- ISO day-of-week (where weeks start on monday, which is 1)
       floor(extract(seconds from ts))::int only_seconds,
       floor(extract(milliseconds from ts))::int - 1000 * floor(extract(seconds from ts))::int only_milliseconds,
       floor(extract(microseconds from ts))::int - 1000 * floor(extract(milliseconds from ts))::int only_microseconds,
       extract(microseconds from ts) all_microseconds

Ou, si vous cherchez à savoir jusqu'où se trouve un horodatage dans sa semaine réelle, vous pouvez utiliser timestamp (et interval ) l'arithmétique aussi :

select ts - date_trunc('week', ts) time_elapsed_since_monday

(Bien qu'il soit assez difficile de calculer cela pour les semaines qui commencent le dimanche :date_trunc fonctionne avec seulement des semaines ISO).

http://rextester.com/SOOO48159