php - Mysql获取日期为本月的元组

标签 php mysql sql

我写了这个 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/

相关文章:

php - 检查 select 语句是否包含文本,然后用另一个文本更改它

MYSQL FULLTEXT 搜索无法正常工作

mysql - 查找经常一起使用的标签

php - 列表更新 - 行冲突

sql - 这个 WHERE 子句和这个 Join 有什么区别?

php - 选择要编辑的文件

php - 如何使用 javascript 或 php 禁用 Internet Explorer 缓存

sql - MySQL查询帮助(涉及连接?)

php - "Unfolding"一个字符串

php - 使用表单数据进行 SQL 选择查询