sql >> Database >  >> RDS >> PostgreSQL

Hoe date_trunc() werkt in PostgreSQL

In PostgreSQL, de date_trunc() functie kapt een datum/tijd-waarde af tot een gespecificeerde precisie.

Het kan de waarde ook afkappen tot een gespecificeerde precisie in een gespecificeerde tijdzone.

Je zou het kunnen zien als een datumversie van de trunc() functie (die getallen afkapt).

Syntaxis

De syntaxis gaat als volgt:

date_trunc(field, source [, time_zone ])

Waar:

  • field is de precisie waarvoor de invoerwaarde moet worden afgekapt (bijvoorbeeld month , hour , enzovoort). Zie hieronder voor een volledige lijst van acceptabele waarden voor dit argument.
  • source is een waarde-expressie van het type timestamp , tijdstempel met tijdzone , of interval . Merk op dat waarden van het type datum en tijd worden automatisch gegoten naar tijdstempel of interval , respectievelijk.
  • De optionele time_zone argument kan worden opgegeven om een ​​andere tijdzone op te geven.

Het field argument kan een van de volgende zijn:

  • microseconden
  • milliseconden
  • tweede
  • minuut
  • uur
  • dag
  • week
  • maand
  • kwartaal
  • jaar
  • decennium
  • eeuw
  • millennium

Basisvoorbeeld

Hier is een voorbeeld om te demonstreren.

SELECT date_trunc('hour', timestamp '2020-06-30 17:29:31');

Resultaat:

2020-06-30 17:00:00

We kunnen zien dat het tijdsgedeelte van de datum is ingekort vanaf 17:29:31 tot 17:00:00 . Dat komt omdat ik hour heb gebruikt voor het eerste argument.

Hier is het met verschillende waarden voor het eerste argument.

\x
SELECT 
  date_trunc('minute', timestamp '2020-06-30 17:29:31'),
  date_trunc('day', timestamp '2020-06-30 17:29:31'),
  date_trunc('month', timestamp '2020-06-30 17:29:31'),
  date_trunc('year', timestamp '2020-06-30 17:29:31');

Resultaat (met verticale uitvoer):

date_trunc | 2020-06-30 17:29:00
date_trunc | 2020-06-30 00:00:00
date_trunc | 2020-06-01 00:00:00
date_trunc | 2020-01-01 00:00:00

In dit geval gebruikte ik \x om uitgebreide weergave/verticale uitvoer in te schakelen, zodat het gemakkelijker is om de resultaten te lezen.

Met tijdzone

Hier is een voorbeeld om de WITH TIME ZONE te demonstreren optie.

SELECT 
date_trunc('hour', timestamp with time zone '2020-06-30 17:29:31+00'),
date_trunc('hour', timestamp with time zone '2020-06-30 17:29:31+01');

Resultaat:

date_trunc | 2020-07-01 03:00:00+10
date_trunc | 2020-07-01 02:00:00+10

De lokale tijdzone toen ik deze voorbeelden uitvoerde, was Australië/Brisbane.

Je kunt ook de volledige naam van de tijdzone toevoegen als derde argument.

SELECT 
date_trunc('hour', timestamp with time zone '2020-06-30 17:29:31+12', 'Pacific/Auckland'),
date_trunc('hour', timestamp with time zone '2020-06-30 17:29:31+12', 'Pacific/Auckland');

Resultaat:

date_trunc | 2020-06-30 15:00:00+10
date_trunc | 2020-06-30 15:00:00+10

Met interval

Hier is een voorbeeld dat een intervalwaarde gebruikt in plaats van een datum.

SELECT date_trunc('hour', interval '7 days 5 hours 15 minutes');

Resultaat:

7 days, 5:00:00


  1. ORACLE - Selecteer Tellen op een subquery

  2. Vertrouwen herstellen in een externe sleutelbeperking in SQL Server (T-SQL-voorbeelden)

  3. Hoe op te lossen "Er moet een correlatienaam worden opgegeven voor de bulkrijenset in de from-clausule." in SQL Server

  4. Gebruik Create Statement om een ​​tabel te maken in SQL Server - SQL Server / T-SQL Tutorial Part 34