SQL 使用静态日期计算夜间小时数

SQL Calculate hours over night with static date

我正在别人安装的系统上编写查询,所以table不能在这里更改。

问题: 我有一个 table,其中有日期、时间输入和时间输出 做以下记录;

     date               |       timeIN      | timerOUT
-------------------------------------------------
2016-01-01 00:00:00.00  | 2000-01-01 07:00  | 2000-01-01 15:00       DATEDIFF = 8H
2016-01-02 00:00:00.00  | 2000-01-01 07:00  | 2000-01-01 15:00       DATEDIFF = 8H
2016-01-05 00:00:00.00  | 2000-01-01 23:00  | 2000-01-01 07:00       DATEDIFF = -16H

如何从第 3 条记录中获取 DATEDIFF = 8H? 这里的问题是所有 timeIN 和 timeOUT 时间戳都具有相同的虚拟日期。

您可以在 DATEDIFF 函数中使用 CASE 表达式:

SELECT
    Diff = 
        DATEDIFF(
            HOUR, 
            timeIn, 
            CASE 
                WHEN timeOut < timeIn THEN DATEADD(DAY, 1, timeOut) 
                ELSE timeOut 
            END
        )
FROM tbl

如果 timeOut 少于 timeIn,这将增加一天。