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
,这将增加一天。
我正在别人安装的系统上编写查询,所以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
,这将增加一天。