我想弄清楚某个事件是否在某人生日后的几周内发生。一年不重要,只有月和日。
例如,我想知道事件(1月5日)是否在生日后4周内(12月18日)。
在SQL中,我有SELECT ..... where abs(week(event)-week(birthday))<5。
如果活动和生日都在一年中的第4周和第48周之间,这是很好的。
如何设置查询以使其在边缘月份工作?
发布于 2015-11-04 11:23:19
在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发布于 2015-11-04 10:58:37
您可以使用函数DATEDIFF
SELECT DATEDIFF(week,'2014-06-05','2015-08-05') AS DiffDateInWeeks请注意,此函数可能有不同的名称(或参数),这取决于DBMS。例如,对于MySQL,DATEDIFF函数没有“日期部分”参数,因此可以在this answer中执行类似的操作
SELECT DATEDIFF('2014-06-05','2015-08-05')/7.0 AS DiffDateInWeekshttps://stackoverflow.com/questions/33519904
复制相似问题