数据库辅导:SQL自定义函数实现时间转换

相关主题
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

数据库辅导:SQL自定义函数实现时间转换

数据库里面显示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 行受影响)

相关文档
最新文档