sql >> Databasteknik >  >> RDS >> PostgreSQL

Hur date_trunc() fungerar i PostgreSQL

I PostgreSQL, date_trunc() funktionen trunkerar ett datum/tidsvärde med en specificerad precision.

Den kan också trunkera värdet till en specificerad precision i en angiven tidszon.

Du kan tänka dig det som en datumversion av trunc() funktion (som trunkerar tal).

Syntax

Syntaxen ser ut så här:

date_trunc(field, source [, time_zone ])

Var:

  • field är precisionen för vilken inmatningsvärdet ska trunkeras (till exempel month , hour , etc). Se nedan för en fullständig lista över acceptabla värden för detta argument.
  • source är ett värdeuttryck av typen tidsstämpel , tidsstämpel med tidszon , eller intervall . Observera att värden av typen datum och tid castas automatiskt till tidsstämpel eller intervall , respektive.
  • Den valfria time_zone argument kan tillhandahållas för att ange en annan tidszon.

field argument kan vara något av följande:

  • mikrosekunder
  • millisekunder
  • sekund
  • minut
  • timme
  • dag
  • vecka
  • månad
  • kvartal
  • år
  • decennium
  • århundrade
  • millenium

Grundläggande exempel

Här är ett exempel att visa.

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

Resultat:

2020-06-30 17:00:00

Vi kan se att tidsdelen av datumet har trunkerats från 17:29:31 till 17:00:00 . Det beror på att jag använde hour för det första argumentet.

Här är det med olika värden för det första argumentet.

\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');

Resultat (med vertikal utdata):

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

I det här fallet använde jag \x för att aktivera utökad visning/vertikal utdata, så att det är lättare att läsa resultaten.

Med tidszon

Här är ett exempel för att demonstrera WITH TIME ZONE alternativ.

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');

Resultat:

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

Den lokala tidszonen när jag körde dessa exempel var Australien/Brisbane.

Du kan också lägga till hela tidszonens namn som ett tredje 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');

Resultat:

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

Med intervall

Här är ett exempel som använder ett intervallvärde istället för ett datum.

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

Resultat:

7 days, 5:00:00


  1. Fatalt fel:Anrop till odefinierad funktion mysqli_result()

  2. Kan jag ansluta till SQL Server med Windows-autentisering från Java EE-webbappen?

  3. Index på tidsstämpel:Funktioner i indexuttryck måste vara märkta som IMUTABLE

  4. Ta bort ett databaspostkonto i SQL Server (T-SQL)