怎样用x年x天表示时间间隔?

richardxulf 2003-09-10 03:44:44
我知道有一个函数DateDiff来算出指定的日期的间隔,但是算出来的要么就是多少年,或者多少月,多少天等等。我相知道怎么得出用x年x天表达的时间间隔,谢谢
...全文
27 8 打赏 收藏 转发到动态 举报
写回复
用AI写文章
8 条回复
切换为时间正序
请发表友善的回复…
发表回复
yushiro 2003-09-10
  • 打赏
  • 举报
回复
用datediff
welyngj 2003-09-10
  • 打赏
  • 举报
回复
datepart(year,@d2-@d1)+'年'+datepart(dayofyear,@d2-@1)+'天'
有语法错误。不信运行一下。
w_rose 2003-09-10
  • 打赏
  • 举报
回复
不需要datediff函数。

datepart(year,@d2-@d1)+'年'+datepart(dayofyear,@d2-@1)+'天'
tttt415 2003-09-10
  • 打赏
  • 举报
回复
标准的时间间隔类型是不能表示x年x日的。根据sql92的数据类型定义,interval类型只能是一下一种:year、year-month、month、day、day-hour、...second。也就是说,month和day是一个分水岭,month以及month以上的精度不能和day或day以下的精度同时出现。

这个东西的原理可以简单的像下面这样理解:
在数据库中,间隔类型作为一种数值类型。他的特点与其他数值有很多、相似的地方,例如可以进行加、减法,例如1天+1天=2天。有进位的概念,例如12月=1年、24小时=1天。可以和普通的数值类型进行乘、除法,例如1天*2=2天。

而你所要求的x年x日的这种类型,将不可能作为一种数值类型存在,例如1年1日+1年1日=?,1年1日*2=?。由于存在闰年的问题,所以这种新的类型将无法进行运算。

当然,你也可以采用自己定义的算法来计算两个时间的间隔是x年x日。不过一定要记住:这种表示不是标准的,不应该叫“间隔”(不能和大家都公认的叫法混淆)。而且,除非你写明算法,否则别人无法理解你的x年x日到底表示什么。

其实myflok(阿棋) 的思路就很好,可以充分体现x年x日在实际生活中的含义,例如22年-81天表示距离22岁生日还差81天,如果得到的结果是22年81天,那末就表示已经过了22岁生日81天。总之x年x日用来表示与一个特定含义日期的距离很好。
zjcxc 元老 2003-09-10
  • 打赏
  • 举报
回复
declare @d1 datetime,@d2 datetime
select @d1='2001-2-01'
,@d2='2003-12-31'

select cast(datediff(year,@d1,@d2) as varchar)+'年'
+cast(datediff(day,dateadd(year,datediff(year,@d1,@d2),@d1),@d2) as varchar)+'天'
keekeep 2003-09-10
  • 打赏
  • 举报
回复
to:myflok(阿棋)

我用你的公式算出了22年-81天的结果(用我的生日)...
dafu71 2003-09-10
  • 打赏
  • 举报
回复
修正

select cast(datediff(yy,'2002-08-10',left(convert(varchar(10),getdate(),120),4)+right('2002-08-10',6))as varchar(10)) + '年' + cast(datediff(dd,left(convert(varchar(10),getdate(),120),4)+right('2003-08-10',6),getdate())as varchar(10)) + '天'

----------1年31天

select cast(datediff(yy,YOURDATE,left(convert(varchar(10),getdate(),120),4)+right(YOURDATE,6))as varchar(10)) + '年' + cast(datediff(dd,left(convert(varchar(10),getdate(),120),4)+right(YOURDATE,6),getdate())as varchar(10)) + '天'
dafu71 2003-09-10
  • 打赏
  • 举报
回复
select cast(datediff(yy,'2002-9-10',getdate())as varchar(10)) + '年' + cast(datediff(dd,left(convert(varchar(10),getdate(),120),4)+'-01-01',getdate())as varchar(10)) + '天'
----------1年252天

select cast(datediff(yy,YOURDATE,getdate())as varchar(10)) + '年' + cast(datediff(dd,left(convert(varchar(10),getdate(),120),4)+'-01-01',getdate())as varchar(10)) + '天'

34,587

社区成员

发帖
与我相关
我的任务
社区描述
MS-SQL Server相关内容讨论专区
社区管理员
  • 基础类社区
  • 二月十六
  • 卖水果的net
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧