【问题标题】:How to get the number of hours between start and end time when start time greater than endtime in SQL Server?SQL Server中开始时间大于结束时间时如何获取开始时间和结束时间之间的小时数?
【发布时间】:2014-10-17 15:45:58
【问题描述】:

我如何获得之间的小时数

开始时间 = '23:00:00.0000000'

结束时间 = '07:00:00.0000000'

在 SQL SERVER 中? 我尝试使用select DATEDIFF(hour, '23:00:00.0000000','07:00:00.0000000'),但它返回负数-16

我希望结果为 8 小时。

【问题讨论】:

  • 如果没有日期,你怎么知道结果是 8 小时而不是 -16?
  • 抱歉,我编辑了我的问题。我正在尝试使用没有日期的开始时间和结束时间来获取小时数。
  • 你没有抓住重点。那么我们怎么知道这只是一天而不是 2、3 或 4 天呢?间隔是否总是包含 24 小时时间段?如果是这样,您需要检查(案例)以查看开始时间>结束时间。如果是,那么您需要 24 开始时间 + 结束时间。否则只需将结束时间减去开始时间。
  • 是的,时间间隔默认为 24​​ 小时。
  • 你能帮我做个案例陈述吗?

标签: sql-server sql-server-2008


【解决方案1】:

那么这是一种方式:

SELECT CASE 
            WHEN DATEDIFF(HOUR,'23:00:00','07:00:00') < 0 
                THEN 24 + DATEDIFF(HOUR,'23:00:00','07:00:00')
            ELSE DATEDIFF(HOUR,'23:00:00','07:00:00')
        END

【讨论】:

    【解决方案2】:

    除了上面发布的关于不知道有多少小时的明显问题之外,您还可以将它们拼凑在一起。请记住,这始终假定少于 24 小时。

    select DATEDIFF(hour, @StartTime, case when @EndTime < @StartTime then DATEADD(Day, 1, cast(@EndTime as datetime)) else @EndTime end) 
    

    【讨论】:

    • 不知道为什么这会遭到反对,这是一种有效的方式
    • 为什么不取绝对值?
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-07-04
    • 1970-01-01
    • 2021-09-06
    • 1970-01-01
    • 2020-12-03
    相关资源
    最近更新 更多