PostgreSQL zapewnia nam kilka sposobów na określenie dnia, miesiąca i roku od daty.
Trzy funkcje, które natychmiast przychodzą na myśl, to; DATE_PART()
, EXTRACT()
i TO_CHAR()
.
EXTRACT()
EXTRACT()
funkcja pobiera podpola, takie jak rok, miesiąc, godzina lub minuta, część z wartości daty/czasu.
Przykład:
SELECT EXTRACT(YEAR FROM date '2035-10-30');
Wynik:
2035
Możemy zwrócić różne części daty w oddzielnych polach, wykonując trzy oddzielne wywołania tej funkcji:
SELECT
EXTRACT(DAY FROM date '2035-10-30') AS "Day",
EXTRACT(DOW FROM date '2035-10-30') AS "DOW",
EXTRACT(DOY FROM date '2035-10-30') AS "DOY",
EXTRACT(MONTH FROM date '2035-10-30') AS "Month",
EXTRACT(YEAR FROM date '2035-10-30') AS "Year";
Wynik:
Day | DOW | DOY | Month | Year -----+-----+-----+-------+------ 30 | 2 | 303 | 10 | 2035
Tutaj zwróciłem dzień miesiąca, dzień tygodnia, dzień roku, miesiąc i rok od daty.
Zobacz, jak działa Extract() w PostgreSQL, aby uzyskać więcej przykładów i listę nazw pól, które mogą być zwrócone przez tę funkcję.
DATE_PART()
DATE_PART()
funkcja jest odpowiednikiem EXTRACT()
, ale z nieco inną składnią.
SELECT
DATE_PART('DAY', date '2035-10-30') AS "Day",
DATE_PART('DOW', date '2035-10-30') AS "DOW",
DATE_PART('DOY', date '2035-10-30') AS "DOY",
DATE_PART('MONTH', date '2035-10-30') AS "Month",
DATE_PART('YEAR', date '2035-10-30') AS "Year";
Wynik:
Day | DOW | DOY | Month | Year -----+-----+-----+-------+------ 30 | 2 | 303 | 10 | 2035
Ta funkcja wymaga, aby pierwszy argument był podany jako ciąg, a przecinek oddziela dwa argumenty zamiast FROM
słowo kluczowe.
TO_CHAR()
TO_CHAR()
funkcja jest bardziej elastyczna, ponieważ może być wykorzystana do zapewnienia szerszej gamy wyjść. Na przykład, możemy użyć tej funkcji do zwrócenia dnia, miesiąca i roku w jednym polu:
SELECT TO_CHAR(date '2045-12-02', 'Day, DDth Month YYYY');
Wynik:
Saturday , 02nd December 2045
Możemy użyć fm
modyfikator szablonu, aby pominąć wszelkie dopełnienie, które można zastosować:
SELECT TO_CHAR(date '2165-04-01', 'fmDay, fmDDth fmMonth YYYY');
Wynik:
Monday, 1st April 2165
Zwróć też uwagę, że th
modyfikator szablonu jest wystarczająco sprytny, aby wiedzieć, czy st
, nd
, rd
lub th
należy dołączyć.
Oto przykład, który używa różnych wywołań TO_CHAR()
aby wyprowadzić różne części daty w osobnych polach:
SELECT
TO_CHAR(date '2165-04-01', 'fmDay') AS "Day",
TO_CHAR(date '2165-04-01', 'fmDD') AS "DD",
TO_CHAR(date '2165-04-01', 'fmMonth') AS "Month",
TO_CHAR(date '2165-04-01', 'YYYY') AS "YYYY";
Wynik:
Day | DD | Month | YYYY --------+----+-------+------ Monday | 1 | April | 2165