我有一种情况,我将日期分为月,日,年,而我的基准日期为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.
在这里,我面临着闰年的问题。当记录中存在闰年时,我的计算出错了。
希望我对我的问题很清楚。
答案 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;