Możemy użyć następującej metody w PostgreSQL, aby zwrócić pierwszy dzień danego miesiąca.
Może to być pierwszy dzień bieżącego miesiąca lub pierwszy dzień miesiąca na podstawie określonej przez nas daty.
Uzyskanie pierwszego dnia miesiąca pozwala nam na wykonanie dalszych obliczeń w otrzymanym dniu, np. dodanie określonej liczby dni do początku miesiąca itp.
Początek bieżącego miesiąca
Oto przykład, który zwraca pierwszy dzień bieżącego miesiąca:
SELECT date_trunc('month', now());
Wynik:
2022-04-01 00:00:00+10
To używa date_trunc()
PostgreSQLa funkcja, aby zwrócić wyniki, które chcemy. Ta funkcja obcina wartość daty/godziny do określonej precyzji.
W tym przypadku używam now()
funkcja zwracająca bieżącą datę i 'month'
argument modyfikuje tę datę na początek miesiąca.
W razie potrzeby możemy rzutować go na wartość daty:
SELECT date_trunc('month', now())::date;
Wynik:
2022-04-01
Oto znowu, wraz z faktyczną datą uruchomienia przykładu:
SELECT
now()::date AS "Current Date",
date_trunc('month', now())::date AS "Start of Month";
Wynik:
+--------------+----------------+ | Current Date | Start of Month | +--------------+----------------+ | 2022-04-09 | 2022-04-01 | +--------------+----------------+
Początek określonego miesiąca
Nie musi to być początek bieżącego miesiąca. Możemy określić dowolną datę, a zwróci początek miesiąca na podstawie tej daty.
Przykład:
SELECT date_trunc('month', date '2030-07-14')::date;
Wynik:
2030-07-01
Możemy następnie wykorzystać wynik do wykonania na nim innych działań. Na przykład możemy dodać do wyniku podaną liczbę dni w ten sposób:
SELECT date_trunc('month', date '2030-07-14')::date + 20;
Wynik:
2030-07-21
Przykład bazy danych
Oto przykład wykorzystujący daty z bazy danych:
SELECT
rental_date,
date_trunc('month', rental_date)::date AS "The 1st of the Month",
date_trunc('month', rental_date)::date + 19 AS "The 20th of the Month"
FROM rental WHERE customer_id = 459 LIMIT 10;
Wynik:
+---------------------+----------------------+-----------------------+ | rental_date | The 1st of the Month | The 20th of the Month | +---------------------+----------------------+-----------------------+ | 2005-05-24 22:54:33 | 2005-05-01 | 2005-05-20 | | 2005-06-17 02:50:51 | 2005-06-01 | 2005-06-20 | | 2005-06-17 09:38:22 | 2005-06-01 | 2005-06-20 | | 2005-06-17 16:40:33 | 2005-06-01 | 2005-06-20 | | 2005-06-20 02:39:21 | 2005-06-01 | 2005-06-20 | | 2005-06-20 12:35:44 | 2005-06-01 | 2005-06-20 | | 2005-06-20 12:42:00 | 2005-06-01 | 2005-06-20 | | 2005-06-21 02:39:44 | 2005-06-01 | 2005-06-20 | | 2005-07-06 00:22:29 | 2005-07-01 | 2005-07-20 | | 2005-07-08 02:51:23 | 2005-07-01 | 2005-07-20 | +---------------------+----------------------+-----------------------+