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:
fieldto precyzja, z jaką należy obciąć wartość wejściową (na przykładmonth,houritp.). Zobacz poniżej pełną listę dopuszczalnych wartości tego argumentu.sourceto 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_zonemoż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