datediff(分钟,'23:30','24:00')错误

Har*_*rry 0 sql

在SQL 2008中,为什么在执行此操作时出现错误:

select datediff (minute, '23:30','24:00') 
Run Code Online (Sandbox Code Playgroud)

错误是:

Msg 241, Level 16, State 1, Line 1
Conversion failed when converting date and/or time from character string.
Run Code Online (Sandbox Code Playgroud)

即使我改24:00到00:00为什么结果说-1410?

请问我可以使用哪些替代方案?

Tar*_*ryn 5

如果您正在寻找'23:30'和'24:00'之间的区别 - 技术上是第二天,那么您将使用

select datediff (minute, '2012-07-10 23:30','2012-07-11 00:00') 
Run Code Online (Sandbox Code Playgroud)

当你使用:

select datediff (minute, '23:30','00:00') 
Run Code Online (Sandbox Code Playgroud)

'00:00'被解释为同一天,这就是你得到的原因-1410.当天共有1440分钟减去30分钟.该DATEDIFF功能是:

DATEDIFF ( datepart , startdate , enddate )
Run Code Online (Sandbox Code Playgroud)

如果您的结束日期'00:00'在您的开始日期之前,那么您将得到一个负数.

编辑:

根据您的评论,您将使用以下内容为您的表,然后使用CASE周围的语句endtime添加一天:

select datediff(minute
                , starttime
                , case 
                when endtime = '00:00' 
                then dateadd(d, 1, endtime)
                else endtime END)
from yourtable
Run Code Online (Sandbox Code Playgroud)

请参阅SQL Fiddle with Demo