怎么利用sql查询一个时间段内年数?

时间:2022-12-23 17:25:05
怎么利用sql查询一个时间段内年数?
要求:1、要判断这个时间段内的闰年
      2.最后结果应该是一个小数类型的

10 个解决方案

#1


--1
select datediff(yy,'2001-01-12','2010-11-13')

#2


小数类型???那你干脆多少天得了,
比如说3.2年 你让人。。。。。。。。。。。。。。。。。 怎么利用sql查询一个时间段内年数?

#3


引用 2 楼 beirut 的回复:
小数类型???那你干脆多少天得了,
比如说3.2年 你让人。。。。。。。。。。。。。。。。。
怎么利用sql查询一个时间段内年数?

#4


--sql 2000
declare @sdate datetime
declare @edate datetime
set @sdate = '2000-10-15'
set @edate = '2009-02-10'


select 
    year(dateadd(yy,num,@sdate)) dt , 
    case when (year(dateadd(yy,num,@sdate)) % 400 = 0) or
              (year(dateadd(yy,num,@sdate)) % 4 = 0 and year(dateadd(yy,num,@sdate)) % 100 <> 0)
         then '润年' else '非润年' end [润年/非润年]
from 
    (select isnull((select count(1) from sysobjects where id<t.id),0) as num from sysobjects t) a
where
    year(dateadd(yy,num,@sdate))<=year(@edate)

/*
dt          润年/非润年 
----------- ------ 
2000        润年
2001        非润年
2002        非润年
2003        非润年
2004        润年
2005        非润年
2006        非润年
2007        非润年
2008        润年
2009        非润年

(所影响的行数为 10 行)
*/


在公历(格里历)纪年中,有闰日的年份叫闰年,一般年份365天,闰年为366天。由于地球绕太阳运行周期为365天5小时48分46秒(合365.24219天)即一回归年,公历把一年定为365天。所余下的时间约为四年累计一天,加在二月里,所以平常年份每年365天,二月为28天,闰年为366天,二月为29天。因此,每400年中有97个闰年,闰年在2月末增加一天,闰年366天。 闰年的计算方法:公元纪年的年数可以被四整除,即为闰年;被100整除而不能被400整除为平年;被100整除也可被400整除的为闰年。如2000年是闰年,而1900年不是。 

#5


我最后所得到的结果是这个时间段内总共经过了多少年...数据类型是Decimal类型的

#6


时间段 还能是decimal ?

#7


开始日期到当年12月31日的天数占当年整年天数的比率,是个小数
结束日期的当年1月1日到结束日期当天的天数占当年整年天数的比率,是个小数
这2个中间相隔的年数
3者相加即可,不用考虑闰年,因为datediff(dd,'2000-1-1','2000-12-31'),会帮你计算好的

#8


引用 7 楼 glint 的回复:
开始日期到当年12月31日的天数占当年整年天数的比率,是个小数
结束日期的当年1月1日到结束日期当天的天数占当年整年天数的比率,是个小数
这2个中间相隔的年数
3者相加即可,不用考虑闰年,因为datediff(dd,'2000-1-1','2000-12-31'),会帮你计算好的
那怎么计算开始日期以及结束日期天数占整年天数的比率呢?不判断闰年和平年怎么计算啊?一个要除以365一个要除以366呢...

#9


计算'2000-10-15'到'2009-02-10'


datediff(dd,'2000-10-15','2000-12-31') / datediff(dd,'2000-1-1','2000-12-31')
+
datediff(dd,'2009-1-1','2009-2-10') / datediff(dd,'2009-1-1','2009-12-31')
+
datediff(yy,'2000-10-15','2009-2-10') - 1

#10



  2.最后结果应该是一个小数类型的
declare @date1 datetime
set @date1='2001/09/08'
select cast(DATEDIFF(day, @date1,getdate()) as decimal(18,2)) / cast(365 as decimal(18,2))

#1


--1
select datediff(yy,'2001-01-12','2010-11-13')

#2


小数类型???那你干脆多少天得了,
比如说3.2年 你让人。。。。。。。。。。。。。。。。。 怎么利用sql查询一个时间段内年数?

#3


引用 2 楼 beirut 的回复:
小数类型???那你干脆多少天得了,
比如说3.2年 你让人。。。。。。。。。。。。。。。。。
怎么利用sql查询一个时间段内年数?

#4


--sql 2000
declare @sdate datetime
declare @edate datetime
set @sdate = '2000-10-15'
set @edate = '2009-02-10'


select 
    year(dateadd(yy,num,@sdate)) dt , 
    case when (year(dateadd(yy,num,@sdate)) % 400 = 0) or
              (year(dateadd(yy,num,@sdate)) % 4 = 0 and year(dateadd(yy,num,@sdate)) % 100 <> 0)
         then '润年' else '非润年' end [润年/非润年]
from 
    (select isnull((select count(1) from sysobjects where id<t.id),0) as num from sysobjects t) a
where
    year(dateadd(yy,num,@sdate))<=year(@edate)

/*
dt          润年/非润年 
----------- ------ 
2000        润年
2001        非润年
2002        非润年
2003        非润年
2004        润年
2005        非润年
2006        非润年
2007        非润年
2008        润年
2009        非润年

(所影响的行数为 10 行)
*/


在公历(格里历)纪年中,有闰日的年份叫闰年,一般年份365天,闰年为366天。由于地球绕太阳运行周期为365天5小时48分46秒(合365.24219天)即一回归年,公历把一年定为365天。所余下的时间约为四年累计一天,加在二月里,所以平常年份每年365天,二月为28天,闰年为366天,二月为29天。因此,每400年中有97个闰年,闰年在2月末增加一天,闰年366天。 闰年的计算方法:公元纪年的年数可以被四整除,即为闰年;被100整除而不能被400整除为平年;被100整除也可被400整除的为闰年。如2000年是闰年,而1900年不是。 

#5


我最后所得到的结果是这个时间段内总共经过了多少年...数据类型是Decimal类型的

#6


时间段 还能是decimal ?

#7


开始日期到当年12月31日的天数占当年整年天数的比率,是个小数
结束日期的当年1月1日到结束日期当天的天数占当年整年天数的比率,是个小数
这2个中间相隔的年数
3者相加即可,不用考虑闰年,因为datediff(dd,'2000-1-1','2000-12-31'),会帮你计算好的

#8


引用 7 楼 glint 的回复:
开始日期到当年12月31日的天数占当年整年天数的比率,是个小数
结束日期的当年1月1日到结束日期当天的天数占当年整年天数的比率,是个小数
这2个中间相隔的年数
3者相加即可,不用考虑闰年,因为datediff(dd,'2000-1-1','2000-12-31'),会帮你计算好的
那怎么计算开始日期以及结束日期天数占整年天数的比率呢?不判断闰年和平年怎么计算啊?一个要除以365一个要除以366呢...

#9


计算'2000-10-15'到'2009-02-10'


datediff(dd,'2000-10-15','2000-12-31') / datediff(dd,'2000-1-1','2000-12-31')
+
datediff(dd,'2009-1-1','2009-2-10') / datediff(dd,'2009-1-1','2009-12-31')
+
datediff(yy,'2000-10-15','2009-2-10') - 1

#10



  2.最后结果应该是一个小数类型的
declare @date1 datetime
set @date1='2001/09/08'
select cast(DATEDIFF(day, @date1,getdate()) as decimal(18,2)) / cast(365 as decimal(18,2))