Sql server 减去ms sql server 2008中的两个时间值

Sql server 减去ms sql server 2008中的两个时间值,sql-server,sql-server-2008,time,subtraction,Sql Server,Sql Server 2008,Time,Subtraction,如何在SQLServer2008中减去两个时间值。我在存储过程中使用时间变量 请提供帮助您可以使用: 下面的表达对我很有用 declare @starttime Time, @endtime Time set @starttime='18:45' set @endtime='22:45' select DATEDIFF(HH,@starttime, @endtime) 输出:4即使您正在使用偏移值或正常日期,此代码也会为您提供适当的答案 BEGIN TRY DECLARE @OffSet

如何在SQLServer2008中减去两个时间值。我在存储过程中使用时间变量

请提供帮助

您可以使用:


下面的表达对我很有用

declare @starttime Time, @endtime Time
set @starttime='18:45'
set @endtime='22:45'
select DATEDIFF(HH,@starttime, @endtime)

输出:4

即使您正在使用偏移值或正常日期,此代码也会为您提供适当的答案

   BEGIN TRY
DECLARE @OffSetVal1 VARCHAR(39) = '2019-12-02 09:15:29 +14:00'
      , @OffSetVal2 VARCHAR(39) = '2019-12-02 09:15:29 +12:30'
      , @minutes INT = 0
      , @OffSetDiff VARCHAR(19) = ''
      , @HourDiff INT = 0

SET @HourDiff = DATEDIFF(HOUR,@OffSetVal1,@OffSetVal2) -- To Check digits of hours.
SET @minutes = DATEDIFF(MINUTE,@OffSetVal1,@OffSetVal2) -- To Convert minutes to hours.
SET @OffSetDiff = @minutes / 60 + (@minutes % 60) / 100.0 -- To Check '+' Or '-' And To Get Value. 


SELECT CASE WHEN CAST(@OffSetDiff AS FLOAT) <= 0  
            THEN (CASE WHEN @HourDiff < 10
                      THEN FORMAT(CAST(@OffSetDiff AS FLOAT),'0#.00')
                 ELSE FORMAT(CAST(@OffSetDiff AS FLOAT),'0#.00') 
                 END)
        ELSE (CASE WHEN @HourDiff < 10
                      THEN '+'+FORMAT(CAST(@OffSetDiff AS FLOAT),'0#.00')
                 ELSE '+'+FORMAT(CAST(@OffSetDiff AS FLOAT),'0#.00') 
                 END) 
        END

END TRY
BEGIN CATCH
PRINT N'It seems you provided an invalid DateTimeOffSet Parameter. '
END CATCH
开始尝试
声明@OffSetVal1 VARCHAR(39)='2019-12-02 09:15:29+14:00'
,@OffSetVal2 VARCHAR(39)='2019-12-02 09:15:29+12:30'
,@minutes INT=0
,@OffSetDiff VARCHAR(19)=”
,@HourDiff INT=0
设置@HourDiff=DATEDIFF(HOUR、@OffSetVal1、@OffSetVal2)--检查小时数。
设置@minutes=DATEDIFF(分钟、@OffSetVal1、@OffSetVal2)--将分钟转换为小时。
设置@OffSetDiff=@minutes/60+(@minutes%60)/100.0--以检查“+”或“-”并获取值。

选择CASE WHEN CAST CAST(@OffSetDiff AS FLOAT)以使用DATEDIFF()变量应在datetime中?@Vyas您有什么数据类型?@Vyas-它适用于
time
datatype-例如
选择DATEDIFF(第二,CAST('11:24:18.3500000'作为时间),CAST('12:24:18.3500000'作为时间))
根据MSDN文档(可在找到)最后两个参数是“可以解析为时间、日期、smalldatetime、datetime、datetime2或datetimeoffset值的表达式。”
declare @starttime Time, @endtime Time
set @starttime='18:45'
set @endtime='22:45'
select DATEDIFF(HH,@starttime, @endtime)
   BEGIN TRY
DECLARE @OffSetVal1 VARCHAR(39) = '2019-12-02 09:15:29 +14:00'
      , @OffSetVal2 VARCHAR(39) = '2019-12-02 09:15:29 +12:30'
      , @minutes INT = 0
      , @OffSetDiff VARCHAR(19) = ''
      , @HourDiff INT = 0

SET @HourDiff = DATEDIFF(HOUR,@OffSetVal1,@OffSetVal2) -- To Check digits of hours.
SET @minutes = DATEDIFF(MINUTE,@OffSetVal1,@OffSetVal2) -- To Convert minutes to hours.
SET @OffSetDiff = @minutes / 60 + (@minutes % 60) / 100.0 -- To Check '+' Or '-' And To Get Value. 


SELECT CASE WHEN CAST(@OffSetDiff AS FLOAT) <= 0  
            THEN (CASE WHEN @HourDiff < 10
                      THEN FORMAT(CAST(@OffSetDiff AS FLOAT),'0#.00')
                 ELSE FORMAT(CAST(@OffSetDiff AS FLOAT),'0#.00') 
                 END)
        ELSE (CASE WHEN @HourDiff < 10
                      THEN '+'+FORMAT(CAST(@OffSetDiff AS FLOAT),'0#.00')
                 ELSE '+'+FORMAT(CAST(@OffSetDiff AS FLOAT),'0#.00') 
                 END) 
        END

END TRY
BEGIN CATCH
PRINT N'It seems you provided an invalid DateTimeOffSet Parameter. '
END CATCH