例如,如果我有搜索字符串“2017-12-14”,那么我需要查找与 7 天范围匹配的所有行:“%-12-11”、“%-12-12”、“% -12-13”、“%-12-14”、“%-12-15”、“%-12-16”、“%-12-17”。
是否可以只用MySql来做?
最佳答案
要选择跨年的同一天,您可以使用以下技巧。
- 获取过去 7 天/1 周的列表
NOW() - INTERVAL 1 WEEK
- 获取那几天的
DAYOFYEAR
- 在数据库中搜索一年中同一天的所有值
。
SELECT * FROM timevalues
WHERE DAYOFYEAR(timefield) IN (
SELECT DAYOFYEAR(timefield)
FROM timevalues
WHERE DATE(timefield) BETWEEN NOW() - INTERVAL 1 WEEK AND NOW()
)
;
注意:闰年不计算在内!
根据我根据闰年的简要调查,将 SQL 查询扩展为 1 天的容差会更容易,即使用 - INTERVAL 8 DAY
而不是 7
和然后在循环处理数据的过程中控制数据库外的日期有效性。
关于MySql 日期范围搜索,包含月份和日期(任何年份),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47818935/