+ -
当前位置:首页 → 问答吧 → 关于时间函数,问一个简单的问题!

关于时间函数,问一个简单的问题!

时间:2011-11-07

来源:互联网

下面是我的求时间间隔函数,当我改变@time2,出现了我无法解释的错误,具体如下:

SQL code

declare @time1 datetime,@time2 datetime

select @time1='2011-01-01',@time2='2011-12-31'


select rtrim(right(year(@time2-@time1),2)*1)
+'年零'+rtrim(month(@time2-@time1))+''
/*
0年零12月,这个对了!
*/
go
declare @time1 datetime,@time2 datetime

select @time1='2011-01-01',@time2='2012-12-31'


select rtrim(right(year(@time2-@time1),2)*1)
+'年零'+rtrim(month(@time2-@time1))+''
/*
2年零1月,明显不对!
*/
go
declare @time1 datetime,@time2 datetime

select @time1='2011-01-01',@time2='2013-12-31'


select rtrim(right(year(@time2-@time1),2)*1)
+'年零'+rtrim(month(@time2-@time1))+''
/*
3年零1月,也不对
*/

作者: linjiangxian11   发布时间: 2011-11-07

SQL code
declare @time1 datetime,@time2 datetime

select @time1='2011-01-01',@time2='2012-12-31'


select rtrim(datediff(month,@time1,@rime2)/12)
+'年零'+rtrim(datediff(month,@time1,@rime2)%12)+''

作者: ssp2009   发布时间: 2011-11-07

SQL code
SELECT  CONVERT(VARCHAR, FLOOR(DATEDIFF(mm, @time1, @time2) / 12)) + '年零'
        + CONVERT(VARCHAR, DATEDIFF(mm, @time1, @time2) % 12) + ''



因为
RTRIM(MONTH(@time2- @time1)) 地方你没考虑年份

作者: OrchidCat   发布时间: 2011-11-07

感谢您的回答,不过还是不对!请您看看还要做些什么修改呢?

SQL code

declare @time1 datetime,@time2 datetime
select @time1='2011-01-01',@time2='2011-12-31'
select rtrim(datediff(month,@time1,@time2)/12)
+'年零'+rtrim(datediff(month,@time1,@time2)%12)+''
/*
0年零11月
*/
go
declare @time1 datetime,@time2 datetime
select @time1='2011-01-01',@time2='2012-12-31'
select rtrim(datediff(month,@time1,@time2)/12)
+'年零'+rtrim(datediff(month,@time1,@time2)%12)+''
/*
1年零11月
*/
go
declare @time1 datetime,@time2 datetime
select @time1='2011-01-01',@time2='2013-12-31'
select rtrim(datediff(month,@time1,@time2)/12)
+'年零'+rtrim(datediff(month,@time1,@time2)%12)+''
/*
2年零11月
*/
go




作者: linjiangxian11   发布时间: 2011-11-07

引用楼主 linjiangxian11 的回复:
下面是我的求时间间隔函数,当我改变@time2,出现了我无法解释的错误,具体如下:

SQL code

declare @time1 datetime,@time2 datetime

select @time1='2011-01-01',@time2='2011-12-31'


select rtrim(right(year(@time2-@time1),2)*1)
+'年零'+rtr……



 12个月 <> 1年???

作者: OrchidCat   发布时间: 2011-11-07

按天计算,默认为1号,减1天就行了

作者: roy_88   发布时间: 2011-11-07

SQL code
declare @time1 datetime,@time2 datetime

select @time1='2011-01-01',@time2='2011-12-31'


select rtrim(right(year(@time2-@time1-1),2)*1)
+'年零'+rtrim(month(@time2-@time1))+''

go
declare @time1 datetime,@time2 datetime

select @time1='2011-01-01',@time2='2012-12-31'


select rtrim(right(year(@time2-@time1-1),2)*1)
+'年零'+rtrim(month(@time2-@time1-1))+''

go
declare @time1 datetime,@time2 datetime

select @time1='2011-01-01',@time2='2013-12-31'


select rtrim(right(year(@time2-@time1-1),2)*1)
+'年零'+rtrim(month(@time2-@time1-1))+''


/*

------------------------------
0年零12月

(1 row(s) affected)


------------------------------
1年零12月

(1 row(s) affected)


------------------------------
2年零12月

(1 row(s) affected)




*/

作者: roy_88   发布时间: 2011-11-07

SQL code
SQL默认日期为

select CAST(0 as datetime)
/*
1900-01-01 00:00:00.000
*/


作者: roy_88   发布时间: 2011-11-07