这是我用来获取当前周订单的SQL:
SELECT * FROM orders
WHERE YEARWEEK(order_date, 1) = YEARWEEK(CURDATE(), 1)
ORDER BY order_date DESC;但问题是,它还会选择当前一周中未来日期的记录。如何阻止这种情况?
发布于 2020-08-07 21:32:54
只需在当前日期添加一个条件即可:
SELECT o.*
FROM orders o
WHERE YEARWEEK(order_date, 1) = YEARWEEK(CURDATE(), 1) AND
order_date <= CURDATE()
ORDER BY order_date DESC;发布于 2020-08-07 22:10:27
请注意:如果您在函数中使用order_date列来构建where子句,这将导致查询不使用order_date上的索引,因此如果您的表可能很大,则应该避免查询。
如果计算当前周的第一个日期,则可以只使用order_date构建where子句,并且它将使用索引。
也许this可以帮助激励你:
WHERE order_date BETWEEN DATEADD(DAY, -WEEKDAY(CURDATE())), CURDATE()) AND CURDATE()我没有对此进行测试,但是使用文档将函数名改写为MySQL。这个想法是计算当前周的第一个日期,这样您就知道要过滤的范围。
https://stackoverflow.com/questions/63302875
复制相似问题