我需要选择所有日期(日和月)在未来45天内(不分年份)。以下查询已停止工作。就像在有数据的情况下开始不返回任何行一样。
是否有其他方法来执行此查询?如果需要,可以在php循环中检查记录。
基本上我需要在接下来的45天内显示所有记录,即使一年过去了。
SELECT
p.*,
c.company
FROM
products p
LEFT JOIN
customers c
ON c.id = p.id
WHERE
DATE_FORMAT(p.service_date, '%m-%d') >= DATE_FORMAT(CURDATE(), '%m-%d')
AND DATE_FORMAT(p.service_date, '%m-%d') <= DATE_FORMAT((CURDATE() + INTERVAL 45 DAY), '%m-%d')
AND c.email_service = 1
ORDER BY
p.service_date ASC
3条答案
按热度按时间holgip5t1#
用php解决了这个问题
并将我需要的日期直接插入到查询中
wwwo4jvm2#
解决这个问题的最好办法是使用
DAYOFYEAR
. 困难的部分是在年底45天内处理案件,在这种情况下,你必须拆分支票,看看日期是现在到年底还是年初到现在+45天;否则,您只需检查一年中的某一天是否介于现在和现在+45天之间。尝试用以下内容替换您的状况:您的完整查询应如下所示:
如果你担心闰年,你可以改变
DAYOFYEAR('2018-12-31')
至DAYOFYEAR(CONCAT(YEAR(NOW), '-12-31'))
g9icjywg3#
我不知道为什么你最初的查询
Date_Format()
在柱子上(service_date
),已存储在mysql日期类型中,用于范围比较。它也不能使用任何索引(如果已定义)。你只需要加/减
Interval
截止日期: