0

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

select datediff (minute, '23:30','24:00') 

错误是:

Msg 241, Level 16, State 1, Line 1
Conversion failed when converting date and/or time from character string.

就算我改成24:00为什么00:00结果会这样说-1410

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

4

2 回答 2

5

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

select datediff (minute, '2012-07-10 23:30','2012-07-11 00:00') 

当您使用:

select datediff (minute, '23:30','00:00') 

'00:00' 被解释为同一天,这就是你得到的原因-1410。一天中总共有1440分钟减去30分钟作为差值。DATEDIFF功能是:

DATEDIFF ( datepart , startdate , enddate )

如果您的结束日期“00:00”早于您的开始日期,那么您将得到一个负数。

编辑:

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

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

请参阅带有演示的 SQL Fiddle

于 2012-07-10T23:16:19.247 回答
0

结果显示为 -1410,因为从 23:00 到前一个 00:00 之间有 1,410 分钟。

于 2012-07-10T23:17:26.543 回答