【问题标题】:Performing date/time subtraction in SQL Server在 SQL Server 中执行日期/时间减法
【发布时间】:2012-03-31 11:59:04
【问题描述】:

我在一个表中有四个字段:

date entered, time entered, date completed, time completed

我想知道输入的日期/时间和完成的日期/时间之间的区别

例如

date entered = 1/1/2001
time entered = 10:00
time completed = 1/2/2001
time completed = 11:00

相差 25 小时。

如何使用 select 语句执行此计算?

我刚试过这个:

DATEDIFF(hh,dateadd(hh,[Time Entered],[Date Entered]),dateadd(hh,[Time Completed],[Date Completed]) ) AS [Hours]

并得到以下错误:

Msg 8116, Level 16, State 1, Line 2
Argument data type time is invalid for argument 2 of dateadd function.

【问题讨论】:

标签: sql sql-server sql-server-2008


【解决方案1】:
Declare @dateentered date = '20010101'
Declare @timeentered time = '10:00' 
Declare @datecompleted date = '20010102' 
Declare @timecompleted time = '11:00'

select datediff(hh, @dateentered + cast(@timeentered as datetime), 
                    @datecompleted + cast(@timecompleted as datetime))

所以,就表格的列而言:

select datediff(hh, [date entered] + cast([time entered] as datetime), 
                    [date completed] + cast([time completed] as datetime)) as [Hours]

【讨论】:

  • +1 这是正确的答案,尽管我会将“日期”字段转换为日期时间而不是“时间”。
【解决方案2】:
select datediff(hour,'1/1/2001 10:00','1/2/2001 11:00')

【讨论】:

    【解决方案3】:

    使用DateDiff

    【讨论】:

    • 谢谢!我刚刚更新了我的问题,你可以看看吗
    【解决方案4】:

    试试

    select DateDiff(ss, [Date Entered] + convert(datetime, [Time Entered]), 
                        [Date Completed] + convert(datetime, [Time Completed])) 
    from myTable
    

    在几秒钟内得到结果。

    这是一个独立的例子:

    declare @dateentered date = '1/1/2001'
    declare @timeentered time = '10:00'
    declare @datecompleted date = '1/2/2001'
    declare @timecompleted time = '11:00'
    
    select DateDiff(ss, 
        @dateentered + convert(datetime, @timeentered), 
        @datecompleted + convert(datetime, @timecompleted)) 
    

    当然,您可以指定为 DATEDIFF 指定的不同 dateparts

    【讨论】:

    • 将我的答案更新为有效的答案(如果您的列是日期或日期时间)
    • 操作数数据类型日期对于添加运算符无效。
    • 已修复,因为您使用的是日期和时间类型。
    【解决方案5】:
    DECLARE @StartDate DATETIME
    Declare @EndDate DATETIME
    declare @startime datetime
    declare @endime datetime
    
    SET @StartDate = '2001-01-01'
    set @startime = '10:00'
    SET @EndDate = '2001-01-02'
    set @endime = '11:00'
    
    set @StartDate = @StartDate + @startime
    set @EndDate = @EndDate + @endime
    
    --To get only Hours
    SELECT DATEDIFF(hh, @StartDate,@EndDate ) AS [Hours];
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2012-03-30
      • 1970-01-01
      • 2021-04-28
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多