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ładmonth
,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