2012-06-08 109 views
0

当试图执行下列SQL:Mysql的SEC_TO_TIME产生错误

SELECT SEC_TO_TIME(sum(TIME_TO_SEC(TIMEDIFF(edate,sdate))-rast)+3600) as TotalDiff from tblregtime where userID IN(97,41) AND year(sdate)=2012 

返回该错误:产生

多步OLE DB操作错误。检查每个OLE DB状态值(如果可用)。没有工作完成。

只有当totalDiff的总和超过24小时时才会出现问题。任何建议,为什么我得到这个错误?

+0

我会说,这与mysql无关,但您的驱动程序或您使用它的方式。 – Sebas

+0

我认为负值传递给SEC_TO_TIME或TIME_TO_SEC函数。 –

+0

当直接对数据库运行SQL时,我会得到正确的输出。它当我试图执行SQL时,运行网站,即时获取错误。 (使用mysql odbc 5.1) –

回答

0

SEC_TO_TIME:结果的范围限制为TIME数据类型的范围。如果参数与该范围之外的值相对应,则会发生警告。

TIME:TIME值的范围可以从'-838:59:59'到'838:59:59'。

sum(TIME_TO_SEC(TIMEDIFF(edate,sdate))-rast)+3600是否可能在规定范围之外?

(定义提供在线MySQL 5.5 Reference Manual)。

+0

没有它不可能 –

+0

添加代码到您的Web应用程序打印出每个部分的值(edate,sdate,rast),甚至可能执行TIMEDIFF(edate,sdate)部分查询 - - TIME_TO_SEC ...并将其打印出来......检查错误发生时这些值是什么。毕竟,它一定是SOMETHING! –