我想弄清楚某人是否在某人生日的几周内发生了某件事。这一年并不重要;只有月和日。
例如,我想知道事件(1月5日)是否在生日(12月18日)的4周内。
在SQL中,我有
SELECT ..... where abs(week(event)-week(birthday))<5
如果活动和生日都在一年中的第4周和第48周之间,则效果很好。
如何设置查询以使其适用于边缘月份?
答案 0 :(得分:1)
在SQL Server中,我使用DATEDIFF
和%
(模数)。
SELECT
...
WHERE
(ABS(DATEDIFF(day, @date1, @date2)) % 365) < 4*7
OR
(ABS(DATEDIFF(day, @date1, @date2)) % 365) > 365 - 4*7
为了使计算正确,即使@date1
和@date2
处于闰年的不同年份,我也会将这两个日期移到同一年。这取决于您使用的DBMS,如何更改日期的年份组成部分,但是一旦两个日期都在同一年,则不需要模数:
SELECT
...
WHERE
ABS(DATEDIFF(day, @date1, @date2)) < 4*7
OR
ABS(DATEDIFF(day, @date1, @date2)) > 365 - 4*7
答案 1 :(得分:0)
您可以使用DATEDIFF
功能:
SELECT DATEDIFF(week,'2014-06-05','2015-08-05') AS DiffDateInWeeks
请注意,此功能可能具有不同的名称(或参数),具体取决于DBMS。
例如,对于MySQL,DATEDIFF
函数没有&#39;日期部分&#39;参数,所以你可以在this answer中做一些事情:
SELECT DATEDIFF('2014-06-05','2015-08-05')/7.0 AS DiffDateInWeeks