Mysql获取日期来自本月的元组

时间:2016-10-18 11:09:26

标签: php mysql sql

我已经编写了这个SQL查询,但它返回null,尽管它不应该

我正在使用包含工作时间的数据库。因此,每个工作时间都有一个开始日期时间和一个结束日期时间

我想获得本月记录的所有工作时间:

        SELECT id, DATE_FORMAT(DATE(t.begin), "%d-%m-%Y") as date,
          CONCAT(DATE_FORMAT(t.begin, "%H:%i"), " - ", DATE_FORMAT(t.end, "%H:%i")) as timerange,
          CASE WHEN t.end = "0000-00-00 00:00:00" 
            THEN TIME_FORMAT(TIMEDIFF(DATE_ADD(NOW(), INTERVAL 1 HOUR), t.begin), "%H:%i")
            ELSE TIME_FORMAT(TIMEDIFF(t.end, t.begin), "%H:%i") 
          END as fulltime_duration,
          (
            SELECT TIMEDIFF(l.end, l.begin) as duration
            FROM timeslots l
            WHERE l.type = 2
            AND l.parent_id = t.id
          ) as lunch_duration

        FROM timeslots t
        WHERE t.user_id = '.$userId.'
        AND t.approved = 1
        AND t.type = '.Timeslot::DAY.'
        AND DATE(begin) >= DATE_FORMAT(CURDATE(), "%Y-%m-01")
        ORDER BY t.begin

当我替换此行时:

AND DATE(begin) >= DATE_FORMAT(CURDATE(), "%Y-%m-01")

by:

AND WEEKOFYEAR(begin) = WEEKOFYEAR(NOW())

它会返回本周记录的所有时间。所以一切都在工作,除了这一行

AND DATE(begin) >= DATE_FORMAT(CURDATE(), "%Y-%m-01")

当我用“%d”替换“-01”时,它会返回今天的所有工作时间,所以我想问题来自于这个“-01”。但我不知道如何以不同的方式做到这一点。

有人帮我吗?...

1 个答案:

答案 0 :(得分:0)

这是一种方式:

    DATE(begin) >= DATE_ADD(CURDATE(), 1 - DAY(CURDATE()))

注意:您不需要DATE(begin)(因为时间组件会使其更大),因此您可以使用:

    begin >= DATE_ADD(CURDATE(), 1 - DAY(CURDATE()))

优点是,如果合适,这可以在begin上使用索引。