PostgreSQL
 sql >> Database >  >> RDS >> PostgreSQL

Estrai giorno della settimana, millisecondo, microsecondo, nanosecondo da una data in Postgres

Non sono sicuro di quale equivalente stai cercando, ma:

  • non esiste una precisione di nanosecondi in PostgreSQL:L'intervallo consentito di p (precisione) è da 0 a 6 per il timestamp e interval tipi.
  • alcune parti della data ne includono altre:ad esempio milliseconds contiene seconds &microseconds contiene milliseconds (e quindi seconds anche).

Se stai cercando valori logicamente separati, dovrai fare un po' di matematica, ad esempio:

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

Oppure, se stai cercando di quanto dista un timestamp nella sua settimana effettiva, puoi utilizzare timestamp (e interval ) anche l'aritmetica:

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

(Anche se è piuttosto difficile calcolarlo per settimane che iniziano di domenica:date_trunc funziona solo con settimane ISO).

http://rextester.com/SOOO48159