我正在尝试查询历史数据,我需要仅从 1 个月的时间段返回数据:前 2 周和前 2 周,但我需要年份无关紧要。
因此,如果我今天进行查询,我希望所有具有 date
的行都在 xxxx-06-31 和 xxxx-07-27 之间
在此先感谢您的帮助!
编辑: 我试过两种方法。我认为这两者都不会在新的一年前后奏效。一种是使用 datepart(day),另一种是简单地从日期中减去年份并进行比较。
最佳答案
考虑此问题的最佳方法是将日期转换为 0 到 365 之间的数字,对应于一年中的某一天。然后只需选择此差异小于 14 的日期即可为您提供两周的窗口。
这将在年初或年底崩溃。但简单的模块化算法会给您答案。
幸运的是,MySQL 有DAYOFYEAR(date)
,所以没那么复杂:
SELECT * FROM tbl t
WHERE
MOD(DAYOFYEAR(currdate) - DAYOFYEAR(t.the_date) + 365, 365) <= 14
OR MOD(DAYOFYEAR(t.the_date) - DAYOFYEAR(currdate) + 365, 365) <= 14
需要额外的 + 365
,因为 MySQL 的 MOD 将返回负数。
这个答案没有正确说明闰年。如果当前年份不是闰年并且 currdate 在该年结束后的 14 天内,那么您将错过 1 月中本应包含的一天。如果您关心这一点,则应将 365
替换为 [一年中的天数 - 1
]。
关于mysql - SQL:没有年份的两个日期之间的位置?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12417066/