检查 SQL 中的日期差异时如何考虑闰年

How to consider leap year when checking for date difference in SQL

我有一种情况,我通过将日期拆分为月、日、年来将日期保存在我的数据库中,而我的基准日期是 2010 年 1 月 1 日。

例如,

假设我的日期是 2017 年 9 月 22 日,那么这个日期将保存在我的数据库中,如下所示

basedate = 2010-01-01
comparedate = 2017-09-22
month = 92 //this is the number of month between the basedate and comparedate
day = 2821//this is the number of days between my basedate and comparedate
year = 7//this is the number of years between my basedate and comparedate

所以假设我必须获取从 2 月开始的那些记录,而不管我正在执行以下对我有用的查询的任何年份。

select * from XYZ where month - (year*12) = 1//1 for February.

当我尝试获取日期为 12 的任何记录时,无论是在任何月份或年份,我都在执行以下查询。

select * from XYZ where day - (year*365) = 12//12 is my date.

我这里遇到的是闰年的问题。当记录中有闰年时,我的计算就出错了。

希望我问清楚了。

你为什么不使用

SELECT * FROM XYZ WHERE DATEPART(DAY, comparedate) = 12

?

还有几个月:

SELECT * FROM XYZ WHERE DATEPART(MONTH, comparedate) = 2 --for februayry

根据下面的评论,我想到了另一个解决方案:

SELECT * FROM XYZ WHERE DATEPART(DAY, DATEADD(DAY, basedate, days)) = 12

由于basedate是base,所以它应该是通用的,可以在这里硬编码。在这里,您只需重新确定它的日期,让 SQL 处理所有闰年 :) 然后只需确定它是否是 12 日。

select 
playerno, NAME, YEAR_OF_BIRTH
from
tt_players
where
YEAR_OF_BIRTH % 4 = 0 and YEAR_OF_BIRTH % 100 != 0 or YEAR_OF_BIRTH % 400 = 0;