【问题标题】:Subtract two time values in ms sql server 2008在 ms sql server 2008 中减去两个时间值
【发布时间】:2011-04-21 06:12:25
【问题描述】:

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

请帮忙

【问题讨论】:

    标签: sql-server sql-server-2008 time subtraction


    【解决方案1】:

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

       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
    

    ANS :- +01.30(# 小时和分钟的偏移量差异,如果您不想使用“+”,只需从代码中删除然后运行代码)

    【讨论】:

      【解决方案2】:

      以下表达对我有用

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

      输出:4

      【讨论】:

        【解决方案3】:
        DECLARE @END TIME = '16:00:00.0000000' ,    
             @START TIME = '01:00:00.0000000'
             SELECT convert(TIME,dateadd(ms,DateDiff(ss, @START, @END )*1000,0),114)
        

        【讨论】:

          【解决方案4】:

          你可以使用DATEDIFF():

          SELECT DATEDIFF(Day, startDate, endDate)
            FROM table
          
          SELECT DATEDIFF(Second, date, GETDATE())
            FROM table
          

          【讨论】:

          • 使用 DATEDIFF() 变量应该在日期时间?
          • @Vyas 你有什么数据类型?
          • @Vyas - 它适用于 time 数据类型 - 例如SELECT DATEDIFF(Second, CAST('11:24:18.3500000' as time),CAST('12:24:18.3500000' as time))
          • 根据 MSDN 文档(位于 msdn.microsoft.com/en-us/library/ms189794.aspx),最后两个参数是“可以解析为时间、日期、smalldatetime、datetime、datetime2 或 datetimeoffset 值的表达式。”跨度>
          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多