PostgreSQL - funkcje i operatory DATA / CZAS

Omówiliśmy typy danych Data / Godzina w rozdziale Typy danych . Zobaczmy teraz operatory daty / godziny i funkcje.

W poniższej tabeli wymieniono zachowania podstawowych operatorów arytmetycznych -

Operator Przykład Wynik
+ data „2001-09-28” + liczba całkowita „7” data „2001-10-05”
+ data '2001-09-28' + interwał '1 godzina' sygnatura czasowa „2001-09-28 01:00:00”
+ data „2001-09-28” + godzina „03: 00” sygnatura czasowa '2001-09-28 03:00:00'
+ interwał „1 dzień” + interwał „1 godzina” interwał „1 dzień 01:00:00”
+ sygnatura czasowa '2001-09-28 01:00' + interwał '23 godziny ' sygnatura czasowa „2001-09-29 00:00:00”
+ czas '01: 00 '+ interwał' 3 godziny ' czas '04: 00: 00 '
- - interwał „23 godziny” interwał '-23: 00: 00'
- data '2001-10-01' - data '2001-09-28' liczba całkowita '3' (dni)
- data „2001-10-01” - liczba całkowita „7” data „2001-09-24”
- data '2001-09-28' - interwał '1 godzina' sygnatura czasowa „2001-09-27 23:00:00”
- czas '05: 00 '- czas '03: 00' interwał '02: 00: 00 '
- czas '05: 00 '- interwał' 2 godziny ' czas '03: 00: 00 '
- timestamp '2001-09-28 23:00' - interwał '23 godziny ' sygnatura czasowa „2001-09-28 00:00:00”
- interwał '1 dzień' - interwał '1 godzina' interwał '1 dzień -01: 00: 00'
- sygnatura czasowa '2001-09-29 03:00' - sygnatura czasowa '2001-09-27 12:00' interwał „1 dzień 15:00:00”
* 900 * interwał „1 sekunda” interwał '00: 15: 00'
* 21 * interwał '1 dzień' interwał „21 dni”
* podwójna precyzja „3,5” * interwał „1 godzina” interwał '03: 30: 00 '
/ interwał „1 godzina” / podwójna precyzja „1,5” interwał '00: 40: 00'

Poniżej znajduje się lista wszystkich ważnych dostępnych funkcji związanych z datą i godziną.

S. Nie. Opis funkcji
1 WIEK()

Odejmij argumenty

2 BIEŻĄCA DATA / CZAS ()

Bieżąca data i godzina

3 DATE_PART ()

Pobierz podpole (odpowiednik wyodrębnienia)

4 WYCIĄG()

Pobierz subpole

5 ISFINITE ()

Test na skończoną datę, czas i interwał (nie +/- nieskończoność)

6 UZASADNIAĆ

Dostosuj interwał

AGE (timestamp, timestamp), AGE (timestamp)

S. Nie. Opis funkcji
1

AGE(timestamp, timestamp)

Po wywołaniu z postacią TIMESTAMP drugiego argumentu, AGE () odejmuje argumenty, tworząc „symboliczny” wynik, który używa lat i miesięcy i jest typu INTERVAL.

2

AGE(timestamp)

Po wywołaniu tylko z TIMESTAMP jako argumentem, AGE () odejmuje od current_date (o północy).

Przykład funkcji AGE (znacznik czasu, znacznik czasu) to -

testdb=# SELECT AGE(timestamp '2001-04-10', timestamp '1957-06-13');

Powyższa instrukcja PostgreSQL da następujący wynik -

age
-------------------------
 43 years 9 mons 27 days

Przykład funkcji AGE (znacznik czasu) to -

testdb=# select age(timestamp '1957-06-13');

Powyższa instrukcja PostgreSQL da następujący wynik -

age
--------------------------
 55 years 10 mons 22 days

BIEŻĄCA DATA / CZAS ()

PostgreSQL udostępnia szereg funkcji, które zwracają wartości związane z bieżącą datą i godziną. Oto kilka funkcji -

S. Nie. Opis funkcji
1

CURRENT_DATE

Podaje aktualną datę.

2

CURRENT_TIME

Dostarcza wartości ze strefą czasową.

3

CURRENT_TIMESTAMP

Dostarcza wartości ze strefą czasową.

4

CURRENT_TIME(precision)

Opcjonalnie przyjmuje parametr precyzji, który powoduje zaokrąglenie wyniku do tylu cyfr ułamkowych w polu sekund.

5

CURRENT_TIMESTAMP(precision)

Opcjonalnie przyjmuje parametr precyzji, który powoduje zaokrąglenie wyniku do tylu cyfr ułamkowych w polu sekund.

6

LOCALTIME

Dostarcza wartości bez strefy czasowej.

7

LOCALTIMESTAMP

Dostarcza wartości bez strefy czasowej.

8

LOCALTIME(precision)

Opcjonalnie przyjmuje parametr precyzji, który powoduje zaokrąglenie wyniku do tylu cyfr ułamkowych w polu sekund.

9

LOCALTIMESTAMP(precision)

Opcjonalnie przyjmuje parametr precyzji, który powoduje zaokrąglenie wyniku do tylu cyfr ułamkowych w polu sekund.

Przykłady użycia funkcji z powyższej tabeli -

testdb=# SELECT CURRENT_TIME;
       timetz
--------------------
 08:01:34.656+05:30
(1 row)


testdb=# SELECT CURRENT_DATE;
    date
------------
 2013-05-05
(1 row)


testdb=# SELECT CURRENT_TIMESTAMP;
              now
-------------------------------
 2013-05-05 08:01:45.375+05:30
(1 row)


testdb=# SELECT CURRENT_TIMESTAMP(2);
         timestamptz
------------------------------
 2013-05-05 08:01:50.89+05:30
(1 row)


testdb=# SELECT LOCALTIMESTAMP;
       timestamp
------------------------
 2013-05-05 08:01:55.75
(1 row)

PostgreSQL udostępnia również funkcje, które zwracają czas rozpoczęcia bieżącej instrukcji, a także aktualny czas w momencie wywołania funkcji. Te funkcje to -

S. Nie. Opis funkcji
1

transaction_timestamp()

Jest równoważny CURRENT_TIMESTAMP, ale jego nazwa wyraźnie odzwierciedla to, co zwraca.

2

statement_timestamp()

Zwraca czas rozpoczęcia bieżącej instrukcji.

3

clock_timestamp()

Zwraca aktualny czas, dlatego jego wartość zmienia się nawet w ramach jednego polecenia SQL.

4

timeofday()

Zwraca aktualny czas, ale jako sformatowany ciąg tekstowy, a nie znacznik czasu z wartością strefy czasowej.

5

now()

Jest to tradycyjny odpowiednik PostgreSQL dla transaction_timestamp ().

DATE_PART (tekst, sygnatura czasowa), DATE_PART (tekst, interwał), DATE_TRUNC (tekst, sygnatura czasowa)

S. Nie. Opis funkcji
1

DATE_PART('field', source)

Te funkcje pobierają podpola. Pole parametru musi być ciąg znaków, a nie nazwa.

Prawidłowe nazwy pól to: century, day, decade, dow, doy, epoch, hour, isodow, isoyear, microseconds, millennium, milliseconds, minuta, miesiąc, kwartał, sekunda, strefa czasowa, timezone_hour, timezone_minute, week, year.

2

DATE_TRUNC('field', source)

Ta funkcja jest koncepcyjnie podobna do funkcji obcinania liczb. source to wyrażenie wartości typu timestamp lub interwał. pole określa precyzję obcinania wartości wejściowej. Wartość zwracana jest typu znacznik czasu lub interwał .

Prawidłowe wartości pola to: mikrosekundy, milisekundy, sekunda, minuta, godzina, dzień, tydzień, miesiąc, kwartał, rok, dekada, wiek, tysiąclecie

Poniżej znajdują się przykłady funkcji DATE_PART ( „pole” , źródło) -

testdb=# SELECT date_part('day', TIMESTAMP '2001-02-16 20:38:40');
 date_part
-----------
        16
(1 row)


testdb=# SELECT date_part('hour', INTERVAL '4 hours 3 minutes');
 date_part
-----------
         4
(1 row)

Poniżej znajdują się przykłady funkcji DATE_TRUNC ( „pole” , źródło) -

testdb=# SELECT date_trunc('hour', TIMESTAMP '2001-02-16 20:38:40');
     date_trunc
---------------------
 2001-02-16 20:00:00
(1 row)


testdb=# SELECT date_trunc('year', TIMESTAMP '2001-02-16 20:38:40');
     date_trunc
---------------------
 2001-01-01 00:00:00
(1 row)

EXTRACT (pole z datownika), EXTRACT (pole z przedziału)

Plik EXTRACT(field FROM source)funkcja pobiera pola podrzędne, takie jak rok lub godzina, z wartości daty / godziny. Źródło musi być wyrażeniem wartość typu timestamp, czasu lub przedziału . Pole jest identyfikatorem lub ciąg znaków, który wybiera co pole do ekstraktu z wartości źródłowej. Funkcja EXTRACT zwraca wartości podwójnej precyzji .

Poniżej przedstawiono prawidłowe nazwy pól (podobne do nazw pól funkcji DATE_PART): wiek, dzień, dekada, dow, doy, epoka, godzina, izodow, izoyear, mikrosekundy, milenium, milisekundy, minuta, miesiąc, kwartał, sekunda, strefa czasowa, strefa czasowa_godzina , timezone_minute, week, year.

Poniżej znajdują się przykłady funkcji EXTRACT ( „pole” , źródło) -

testdb=# SELECT EXTRACT(CENTURY FROM TIMESTAMP '2000-12-16 12:21:13');
 date_part
-----------
        20
(1 row)


testdb=# SELECT EXTRACT(DAY FROM TIMESTAMP '2001-02-16 20:38:40');
 date_part
-----------
        16
(1 row)

ISFINITE (data), ISFINITE (sygnatura czasowa), ISFINITE (interwał)

S. Nie. Opis funkcji
1

ISFINITE(date)

Testy na skończoną datę.

2

ISFINITE(timestamp)

Testy skończonego znacznika czasu.

3

ISFINITE(interval)

Testy dla skończonego interwału.

Poniżej przedstawiono przykłady funkcji ISFINITE () -

testdb=# SELECT isfinite(date '2001-02-16');
 isfinite
----------
 t
(1 row)


testdb=# SELECT isfinite(timestamp '2001-02-16 21:28:30');
 isfinite
----------
 t
(1 row)


testdb=# SELECT isfinite(interval '4 hours');
 isfinite
----------
 t
(1 row)

JUSTIFY_DAYS (interwał), JUSTIFY_HOURS (interwał), JUSTIFY_INTERVAL (interwał)

S. Nie. Opis funkcji
1

JUSTIFY_DAYS(interval)

Dostosowuje interwał, tak aby 30-dniowe okresy były przedstawiane jako miesiące. Zwróćinterval rodzaj

2

JUSTIFY_HOURS(interval)

Dostosowuje interwał, tak aby 24-godzinne okresy były przedstawiane jako dni. Zwróćinterval rodzaj

3

JUSTIFY_INTERVAL(interval)

Dostosowuje interwał za pomocą JUSTIFY_DAYS i JUSTIFY_HOURS, z dodatkowymi korektami znaków. Zwróćinterval rodzaj

Poniżej przedstawiono przykłady funkcji ISFINITE () -

testdb=# SELECT justify_days(interval '35 days');
 justify_days
--------------
 1 mon 5 days
(1 row)


testdb=# SELECT justify_hours(interval '27 hours');
 justify_hours
----------------
 1 day 03:00:00
(1 row)


testdb=# SELECT justify_interval(interval '1 mon -1 hour');
 justify_interval
------------------
 29 days 23:00:00
(1 row)