PostgreSQL
 sql >> Baza danych >  >> RDS >> PostgreSQL

Jak działa date_trunc() w PostgreSQL

W PostgreSQL funkcja date_trunc() funkcja obcina wartość daty/czasu do określonej precyzji.

Może również obcinać wartość do określonej precyzji w określonej strefie czasowej.

Możesz myśleć o tym jako o wersji z datą trunc() funkcja (która obcina liczby).

Składnia

Składnia wygląda tak:

date_trunc(field, source [, time_zone ])

Gdzie:

  • field to precyzja, z jaką należy obciąć wartość wejściową (na przykład month , hour itp.). Zobacz poniżej pełną listę dopuszczalnych wartości tego argumentu.
  • source to wyrażenie wartości typu sygnatura czasowa , sygnatura czasowa ze strefą czasową lub przedział . Pamiętaj, że wartości typu data i czas są przesyłane automatycznie do sygnatury czasowej lub przerwa , odpowiednio.
  • Opcjonalna time_zone można podać argument, aby określić inną strefę czasową.

field argument może być dowolnym z następujących:

  • mikrosekundy
  • milisekundy
  • druga
  • minuta
  • godzina
  • dzień
  • tydzień
  • miesiąc
  • kwartał
  • rok
  • dekada
  • wiek
  • tysiąclecie

Przykład podstawowy

Oto przykład do zademonstrowania.

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

Wynik:

2020-06-30 17:00:00

Widzimy, że część daty dotycząca czasu została skrócona z 17:29:31 do 17:00:00 . To dlatego, że użyłem hour dla pierwszego argumentu.

Tutaj jest z różnymi wartościami pierwszego argumentu.

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

Wynik (przy użyciu wyjścia pionowego):

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

W tym przypadku użyłem \x aby włączyć rozszerzone wyświetlanie/wyjście w pionie, aby łatwiej było odczytać wyniki.

Ze strefą czasową

Oto przykład demonstrujący WITH TIME ZONE opcja.

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

Wynik:

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

Lokalna strefa czasowa, kiedy uruchomiłem te przykłady, to Australia/Brisbane.

Możesz także dodać pełną nazwę strefy czasowej jako trzeci 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');

Wynik:

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

Z interwałem

Oto przykład, w którym zamiast daty użyto wartości interwału.

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

Wynik:

7 days, 5:00:00


  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Postgres to najfajniejsza baza danych – Powód 1:Deweloperzy to uwielbiają!

  2. Weryfikowanie kopii zapasowych PostgreSQL w Docker

  3. brak wpisu pg_hba.conf dla hosta

  4. Kolumna nie istnieje?

  5. jak stworzyć tabelę dat gregoriańskich ISO-8601 w postgresie