我已经编写了这个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”。但我不知道如何以不同的方式做到这一点。
有人帮我吗?...
答案 0 :(得分:0)
这是一种方式:
DATE(begin) >= DATE_ADD(CURDATE(), 1 - DAY(CURDATE()))
注意:您不需要DATE(begin)
(因为时间组件会使其更大),因此您可以使用:
begin >= DATE_ADD(CURDATE(), 1 - DAY(CURDATE()))
优点是,如果合适,这可以在begin
上使用索引。