要求:1、要判断这个时间段内的闰年
2.最后结果应该是一个小数类型的
10 个解决方案
#1
--1
select datediff(yy,'2001-01-12','2010-11-13')
#2
小数类型???那你干脆多少天得了,
比如说3.2年 你让人。。。。。。。。。。。。。。。。。
比如说3.2年 你让人。。。。。。。。。。。。。。。。。
#3
#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'),会帮你计算好的
结束日期的当年1月1日到结束日期当天的天数占当年整年天数的比率,是个小数
这2个中间相隔的年数
3者相加即可,不用考虑闰年,因为datediff(dd,'2000-1-1','2000-12-31'),会帮你计算好的
#8
那怎么计算开始日期以及结束日期天数占整年天数的比率呢?不判断闰年和平年怎么计算啊?一个要除以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
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年 你让人。。。。。。。。。。。。。。。。。
比如说3.2年 你让人。。。。。。。。。。。。。。。。。
#3
#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'),会帮你计算好的
结束日期的当年1月1日到结束日期当天的天数占当年整年天数的比率,是个小数
这2个中间相隔的年数
3者相加即可,不用考虑闰年,因为datediff(dd,'2000-1-1','2000-12-31'),会帮你计算好的
#8
那怎么计算开始日期以及结束日期天数占整年天数的比率呢?不判断闰年和平年怎么计算啊?一个要除以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
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))