sql >> Databasteknik >  >> RDS >> PostgreSQL

Extrahera veckodag, millisekund, mikrosekund, nanosekund från ett datum i Postgres

Jag är inte säker på vilken motsvarighet du letar efter, men:

  • det finns ingen nanosekundprecision i PostgreSQL:Det tillåtna intervallet för p (precision) är från 0 till 6 för timestamp och interval typer.
  • vissa datumdelar inkluderar andra:d.v.s. milliseconds innehåller seconds &microseconds innehåller milliseconds (och därmed seconds också).

Om du letar efter logiskt separata värden måste du göra lite matematik, t.ex.:

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

Eller, om du letar efter hur långt en tidsstämpel är inom den faktiska veckan, kan du använda timestamp (och interval ) aritmetik också:

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

(Även om det är ganska svårt att beräkna detta för veckor som börjar på söndag:date_trunc fungerar endast med ISO-veckor).

http://rextester.com/SOOO48159



  1. Generera data för datumintervall inklusive de som inte finns i data

  2. Varför returnerar SQLAlchemy create_engine med charset=utf8 pythontyp <str> och inte <unicode>?

  3. Oracle SQL-gruppering/beställning

  4. REGEXP_COUNT ignorerar skiftlägeskänslighet