我正在尝试查询历史数据,我需要返回 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 将返回负数。
这个答案没有正确解释闰年。如果当前年份不是闰年并且当前日期在该年结束后的 14 天内,那么您将错过 1 月中应该包含的一天。如果您关心这一点,那么您应该更换365
with [the number of days in the year - 1
].
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)