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

时间:2017-09-22 09:45:05

标签: sql sql-server datetime datediff

我有一种情况,我将日期分为月,日,年,而我的基准日期为2010-01-01。我将数据保存在我的数据库中。

例如,

说我的日期是2017-09-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

所以假设我必须得到那些来自二月份的记录,无论我在做什么以下查询,这对我来说都是有效的。

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

当我试图获取任何有日期12的记录而不管任何月份或年份时,我正在进行以下查询。

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

在这里,我面临着闰年的问题。当记录中存在闰年时,我的计算出错了。

希望我对我的问题很清楚。

2 个答案:

答案 0 :(得分:2)

为什么不使用

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是基础,因此它应该是常见的,并且可以在此处进行硬编码。在这里,您只需重新确定它的日期,并让SQL处理所有闰年:)然后确定它是否是第12个。

答案 1 :(得分:-1)

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;