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

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

问题描述:

在SQL 2008,为什么我得到一个错误,当我这样做:DATEDIFF(分钟,'23:30' , '24:00')错误

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

有什么替代品,我可以用这个请吗?

+0

在我看来,24:00在SQL中不是有效的时间。据我所知,24小时制格式从00:00到23:59 – 2012-07-10 23:19:51

如果您正在寻找与'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' 是你的开始日期之前,那么你会得到一个负数。

编辑:

基于您的评论,你会用你的表下面,然后用endtime围绕CASE语句来增加一天吧:

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

SQL Fiddle with Demo

+1

谢谢,我有两列,start_time和end_time ...那么,获得两者之间的分钟数的最佳方法是什么?我只需要在end_time = 00:00时做一个datediff(天,-1,end_time)?有没有更好的办法?该列没有日期组件。只有时间 – Harry 2012-07-10 23:25:46

+0

@Harish请看我的编辑。 – Taryn 2012-07-10 23:35:33

结果表示-1410,因为前面00:00之间的23:00之间有1410分钟。