Можем да използваме следния метод в PostgreSQL, за да върнем първия ден от даден месец.
Това може да бъде първият ден от текущия месец или първият ден от месеца въз основа на дата, която посочваме.
Получаването на първия ден от месеца ни позволява да извършваме допълнителни изчисления на получената дата, като например добавяне на определен брой дни към началото на месеца и т.н.
Начало на текущия месец
Ето пример, който връща първия ден от текущия месец:
SELECT date_trunc('month', now());
Резултат:
2022-04-01 00:00:00+10
Това използва date_trunc()
на PostgreSQL функция за връщане на резултатите, които искаме. Тази функция съкращава стойност за дата/час до определена точност.
В този случай използвам now()
функция за връщане на текущата дата и 'month'
аргумент променя тази дата в началото на месеца.
Можем да го приведем към стойност на дата, ако е необходимо:
SELECT date_trunc('month', now())::date;
Резултат:
2022-04-01
Ето го отново, заедно с действителната дата, на която пуснах примера:
SELECT
now()::date AS "Current Date",
date_trunc('month', now())::date AS "Start of Month";
Резултат:
+--------------+----------------+ | Current Date | Start of Month | +--------------+----------------+ | 2022-04-09 | 2022-04-01 | +--------------+----------------+
Начало на определен месец
Не е задължително да е началото на текущия месец. Можем да посочим всяка дата и тя ще върне началото на месеца въз основа на тази дата.
Пример:
SELECT date_trunc('month', date '2030-07-14')::date;
Резултат:
2030-07-01
След това можем да използваме резултата, за да извършим други действия върху него. Например, можем да добавим определен брой дни към резултата по следния начин:
SELECT date_trunc('month', date '2030-07-14')::date + 20;
Резултат:
2030-07-21
Пример за база данни
Ето пример, който използва дати от база данни:
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;
Резултат:
+---------------------+----------------------+-----------------------+ | 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 | +---------------------+----------------------+-----------------------+