MySQL первый день и последний день текущего и предыдущего месяца с даты (без отметки времени)
Я надеюсь, что следующий запрос даст вам представление о том, что я ищу -
SELECT SUM(t1.hours) AS totalhours FROM
(
SELECT (time_to_sec(timediff(time_out, time_in)) / 3600) AS hours FROM bb_work_log
WHERE user_id = 6 AND (working_date BETWEEN '2014-04-01' AND '2014-04-31')
) AS t1
В моем запросе вы можете увидеть working_date
, который я привел здесь вручную. Но я бы не хотел делать это вручную. Я хотел бы динамически выбирать первый и последний день текущего месяца.
10
3 answers
Вы можете использовать LAST_DAY(NOW() - INTERVAL 1 MONTH) + INTERVAL 1 DAY
, который вычтет один месяц с этого момента и, добавив 1 день в LAST_DAY
предыдущего месяца, даст вам первый день текущего месяца
SELECT SUM(t1.hours) AS totalhours FROM
(
SELECT (time_to_sec(timediff(time_out, time_in)) / 3600) AS hours FROM bb_work_log
WHERE user_id = 6
AND (working_date BETWEEN LAST_DAY(NOW() - INTERVAL 1 MONTH)
AND LAST_DAY(NOW()))
) AS t1
ПОСЛЕДНИЙ ДЕНЬ (СЕЙЧАС() - ИНТЕРВАЛ 1 МЕСЯЦ) это даст вам последний день предыдущего месяца
Демонстрация скрипки в первый/Последний день месяца
11
Author: M Khalid Junaid, 2014-04-09 05:14:01
Вы можете достичь этого следующими способами----
/* Current month*/
SELECT DATE_SUB(LAST_DAY(NOW()),INTERVAL DAY(LAST_DAY(NOW()))-1 DAY),CONCAT(LAST_DAY(NOW()),' 23:59:59');
SELECT LAST_DAY(CURDATE()) - INTERVAL DAY(LAST_DAY(CURDATE()))-1 DAY ,CONCAT(LAST_DAY(NOW()),' 23:59:59');
/* previous month*/
SELECT DATE_FORMAT(CURDATE() - INTERVAL 1 MONTH,'%Y-%m-01 00:00:00'),DATE_FORMAT(LAST_DAY(CURDATE()-INTERVAL 1 MONTH),'%Y-%m-%d 23:59:59');
4
Author: Zigri2612, 2016-08-11 04:47:08
Первый день предыдущего месяца
select last_day(curdate() - interval 2 month) + interval 1 day
Последний день предыдущего месяца
select last_day(curdate() - interval 1 month)
Первый день текущего месяца
select last_day(curdate() - interval 1 month) + interval 1 day
Последний день текущего месяца
select last_day(curdate())
1
Author: Uncle Iroh, 2018-02-20 22:03:34