SQL自定义函数如何实现时间转换
来源:优易学  2011-11-22 10:41:24   【优易学:中国教育考试门户网】   资料下载   IT书店
  数据库里面显示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 行受影响)

责任编辑:小草

文章搜索:
 相关文章
热点资讯
热门课程培训