MySQL从日期开始的当前和上个月的第一天和最后一天(没有时间戳)

Kha*_*han 12 php mysql sql

我希望以下查询可以让您知道我在寻找什么 -

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
Run Code Online (Sandbox Code Playgroud)

在我的查询中,您可以看到working_date我手动给出的内容.但是,我不想手动完成.我想动态选择当月的第一天和最后一天.

M K*_*aid 16

您可以使用LAST_DAY(NOW() - INTERVAL 1 MONTH) + INTERVAL 1 DAY,从现在开始减去一个月,通过在LAST_DAY上个月添加1天将为您提供当月的第一天

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
Run Code Online (Sandbox Code Playgroud)

LAST_DAY(NOW() - INTERVAL 1 MONTH)这将为您提供上个月的最后一天

月小提琴演示的第一天/最后一天


Unc*_*roh 15

上个月的第一天

select last_day(curdate() - interval 2 month) + interval 1 day
Run Code Online (Sandbox Code Playgroud)

上个月的最后一天

select last_day(curdate() - interval 1 month)
Run Code Online (Sandbox Code Playgroud)

当月的第一天

select last_day(curdate() - interval 1 month) + interval 1 day
Run Code Online (Sandbox Code Playgroud)

当月的最后一天

select last_day(curdate())
Run Code Online (Sandbox Code Playgroud)


Zig*_*612 5

你可以通过这些方式实现它----

/* 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');
Run Code Online (Sandbox Code Playgroud)