我写了这个 SQL 查询,但它返回 null,尽管它不应该返回 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")
作者:
AND WEEKOFYEAR(begin) = WEEKOFYEAR(NOW())
返回本周记录的所有时间。所以除了这一行之外一切正常
AND DATE(begin) >= DATE_FORMAT(CURDATE(), "%Y-%m-01")
当我用“%d”替换“-01”时,它返回今天的所有工作时间,所以我猜问题出在这个“-01”。但我看不出如何以不同的方式做到这一点。
有人帮我吗?...
最佳答案
这是一种方法:
DATE(begin) >= DATE_ADD(CURDATE(), 1 - DAY(CURDATE()))
注意:您不需要DATE(begin)
(因为时间分量会使它变大),所以您可以使用:
begin >= DATE_ADD(CURDATE(), 1 - DAY(CURDATE()))
优点是如果合适的话,这可以在 begin
上使用索引。
关于php - Mysql获取日期为本月的元组,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40106628/