SQL自定义函数实现时间转换

 

如有转载请包含出处http://blog.csdn.net/aohan

 

问题来源:

数据库里面显示2个时间差
select datediff(minute ,'2008-11-20 19:20:00','2008-11-20 20:50:00')
这样子得出来的是 90 分钟
但我要显示成 1:30分 该怎么做,?

 

解决:

 

select convert(varchar(5),dateadd(ss,  datediff(ss ,'2008-11-20 19:20:00','2008-11-20 20:50:00') ,108),108)

 

又问:

 

要是我的时间差大于24小时,那显示出来的就不正确了阿,

应该要显示 小时是大于 24的一个数,而不是又回过去了阿。。

 

下面用自定义函数的方法解决

 

Create function [dbo].[f_second_Time] (@second int)
   returns varchar(16)
as
BEGIN
   /*  根据传入的秒数返回秒数所对应的时间,格式为天/时/分/秒
       Create by cjs 2008-11-20       
       使用:  select  dbo.[f_second_Time](214580)
       注意:可查询的最大秒数为35999999,即9999时59分59秒,
       这与返回中cast(@Hours as varchar(4))有关,如果需要更大的精度
       可以在返回时改成如cast(@Hours as varchar(8))
    */
    declare @Secs int
    declare @Mins int
    declare @Hours int
    declare @Days int

    set @Secs=@second%60 --秒
    set @Mins=(@second-(@second%60))/60
    set @Hours=(@Mins-(@Mins%60))/60
    set @Mins=@Mins-@Hours*60 ---'分钟
    --如果要转成日,用下面注释的部分,即把/*去掉
    /*
    set @Days=(@Hours-(@Hours%24))/24 ---'日
    set @Hours=@Hours-@Days*24 ---'小时
    return cast(@Days as varchar(6))
         +'日'+
         cast(@Hours as varchar(4))
         +'时'+
         cast(@Mins as varchar(4))
         +'分'+
         cast(@Secs as varchar(4))
         +'秒'
     */
       --如果要转成日,用上面注释的部分,即把*/去掉,并且把下面的返回注释
     
    return cast(@Hours as varchar(6))+'时'+cast(@Mins as varchar(4))+'分'
           +cast(@Secs as varchar(4))+'秒'

END

 

Go

 

--调用

select [dbo].[f_second_Time]( datediff(ss ,'2008-11-12 19:20:00','2008-11-20 20:51:00'))


以下为结果
----------------
193时31分0秒

(
1 行受影响)

 

 

 

 

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值