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

Hvordan date_trunc() virker i PostgreSQL

I PostgreSQL er date_trunc() funktion afkorter en dato/tidsværdi med en specificeret præcision.

Den kan også afkorte værdien til en specificeret præcision i en specificeret tidszone.

Du kunne tænke på det som en datoversion af trunc() funktion (som afkorter tal).

Syntaks

Syntaksen ser sådan ud:

date_trunc(field, source [, time_zone ])

Hvor:

  • field er den præcision, som inputværdien skal afkortes for (for eksempel month , hour , etc). Se nedenfor for en komplet liste over acceptable værdier for dette argument.
  • source er et værdiudtryk af typen tidsstempel , tidsstempel med tidszone eller interval . Bemærk, at værdier af typen dato og tid castes automatisk til tidsstempel eller interval hhv.
  • Den valgfri time_zone argument kan angives for at angive en anden tidszone.

field argument kan være et af følgende:

  • mikrosekunder
  • millisekunder
  • sekund
  • minut
  • time
  • dag
  • uge
  • måned
  • kvartal
  • år
  • årti
  • århundrede
  • millennium

Grundlæggende eksempel

Her er et eksempel til at demonstrere.

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

Resultat:

2020-06-30 17:00:00

Vi kan se, at tidsdelen af ​​datoen er blevet afkortet fra 17:29:31 til 17:00:00 . Det er fordi jeg brugte hour for det første argument.

Her er det med forskellige værdier for det første 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');

Resultat (ved hjælp af lodret output):

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 dette tilfælde brugte jeg \x for at aktivere udvidet visning/lodret output, så det er nemmere at læse resultaterne.

Med tidszone

Her er et eksempel til at demonstrere WITH TIME ZONE mulighed.

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 lokale tidszone, da jeg kørte disse eksempler, var Australien/Brisbane.

Du kan også tilføje det fulde tidszonenavn som et 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 interval

Her er et eksempel, der bruger en intervalværdi i stedet for en dato.

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

Resultat:

7 days, 5:00:00


  1. Find rækker med flere duplikerede felter med Active Record, Rails &Postgres

  2. Opret tabelvariabel i MySQL

  3. Millisekunder opløsning af DateTime i Ruby

  4. Brug af MySQL Galera Cluster Replication til at skabe en geo-distribueret klynge:Del 1