SQL Server的时差

时间:2015-10-06 12:48:55

标签: sql sql-server

我在SQL Server中有一个函数,它返回时间差异:

create function [dbo].[GetTimeDiffrence] (@dutyHour time, @ShiftTime time)
returns time(0)
as 
begin
     declare @result time(0);
     declare @null time;

     set @null = '00:00:00';

     select
         @result = case
                      when DATEDIFF(SECOND, @dutyHour, @ShiftTime) <= 0
                        then DATEADD(SECOND, -DATEDIFF(SECOND, @dutyHour, @ShiftTime), @null)
                      when DATEDIFF(SECOND, @dutyHour, @ShiftTime) > 0
                        then DATEADD(SECOND,  DATEDIFF(SECOND, @dutyHour, @ShiftTime), @null)
                   end

     return @result;
end
GO

一切正常,SELECT [dbo].[GetTimeDiffrence_test] ('08:00:00','08:30:00')会返回00:30:00的输出。

但如果我将声明改为

SELECT [dbo].[GetTimeDiffrence_test] ('48:00:00','48:30:00')

我收到错误:

  

从字符转换日期和/或时间时转换失败   字符串。

另外,我怎样才能在减号方面有所不同?

1 个答案:

答案 0 :(得分:3)

问题在于您的time参数。声明为时间的变量,范围从00:00:00到23:59:59。看看the docs

发送超过&#34;更大的值&#34;超过24小时将无法工作。