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, который я привел здесь вручную. Но я бы не хотел делать это вручную. Я хотел бы динамически выбирать первый и последний день текущего месяца.

Author: Khan, 2014-04-09

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