有没有什么方法可以在两个跨越午夜的时间之间获得时差?

时间:2018-02-10 08:02:13

标签: sql-server

我想在两次之间得到改变。当时间在同一天内时,差异是可以的。但是当时间跨过午夜时会得到错误的结果。

cut -f 3,3 -d '"' | sed s/^$/\"\"/g

给我结果480是正确的。但是

 SELECT DATEDIFF(minute, '08:00',DATEADD(minute,-60, '17:00')) 

给我结果-960哪个错了。我怎么处理它?我不想使用DateTime数据类型。

4 个答案:

答案 0 :(得分:1)

您可以使用案例陈述,在这种情况下,您需要添加一天并获得结果,如

SELECT DATEDIFF(minute, '20:00',DATEADD(DAY,1,DATEADD(minute,-60, '05:00')))

答案 1 :(得分:0)

您可以使用以下代码:

SELECT DATEDIFF(minute, '20:00',getdate())

答案 2 :(得分:0)

这是一招。无需使用case。将在两种情况下都有效

SELECT (DATEDIFF(minute, '08:00',DATEADD(minute,-60, '17:00')) + 1440) % 1440
SELECT (DATEDIFF(minute, '20:00',DATEADD(minute,-60, '05:00')) + 1440) % 1440

两种情况下的输出均为480

1440 - 一天的分钟数。当datediff返回负值时,将1440添加到案例将返回正确的值。而对于第二种情况,结果将是一些超过1天的值。在这种情况下,我们需要删除额外的值1440.需要% 1440

答案 3 :(得分:0)

尝试以下查询...进行相应的更改。

在CONVERT(DATE,DateOutColumn,103)时的情况> CONVERT(DATE,DateInColumn,103) 然后((ABS(DATEDIFF(MINUTE,CONVERT(TIME,TimeInColumn,108),'23:59:00.0000000')))+ 1+(ABS(DATEDIFF(MINUTE,CONVERT(TIME,TimeOutColumn,108),'00: 00:00.0000000')))))/ 60 其他 (DATEDIFF(MINUTE,CONVERT(TIME,TimeInColumn,108),CONVERT(TIME,TimeOutColumn,108)))/ 60