2010-05-03 142 views
0

我有一个查询,我试图让两个不同时间之间的持续时间(例如6.5小时)。时间差分计算日期和时间在单独列

在我的数据库中,时间和日期保存在不同的字段中,因此我可以高效地查询startDate或endDate,因为我从不按时查询。

我的查询看起来像这样

 
SELECT COUNT(*), IFNULL(SUM(TIMEDIFF(endTime,startTime)),0) FROM events WHERE user=18 

有时一个事件会在一夜之间,所以时间差,需要考虑到的日期之间的差异也是如此。

我一直在试图

 
SELECT COUNT(*), IFNULL(SUM(TIMEDIFF(CONCAT(endDate,' ',endTime),CONCAT(startDate,' ',startTime))),0) FROM events WHERE user=18 

当我做到这不幸的是我只得到错误,我似乎无法在两个字段合并为一个单一的时间戳。

回答

0

很确定你的问题是你的连接值被发送到TIMEDIFF()作为字符串而不是DATETIMEs。尝试调用它们的DATETIME功能:

SELECT COUNT(*), IFNULL(SUM(TIMEDIFF(DATETIME(CONCAT(endDate,' ',endTime)),DATETIME(CONCAT(startDate,' ',startTime)))),0) FROM events WHERE user=18 

我没有一个MySQL数据库在我的测试是正面的,但我认为,或者它的一些类似的形式是你在找什么。有它的一个例子涉及MICROSECOND MySQL的文档:

http://dev.mysql.com/doc/refman/5.0/en/datetime.html

编辑:嗯...看起来TIMEDIFF应该用绳子工作。无论如何值得尝试。

-1
TIMEDIFF(endDate,startDate) + TIMEDIFF(endTime,startTime) 
+0

感谢詹姆斯,我最后不得不使用HOUR(TIMEDIFF(结束日期,的startDate)+ HOUR(TIMEDIFF(结束时间,开始时间),为您介绍的方式,给了8000作为代替8 – pedalpete 2010-05-03 17:30:17

+0

没问题的回应。你会失去小数部分,但我没有安装mySQL来测试,SUM(TIMEDIFF(endDate,startDate),TIMEDIFF(endTime,startTime))怎么样? – James 2010-05-04 08:13:59