2013-11-29 85 views
0

真的需要一些帮助。SQL中的时差。午夜总时间

有与下列的表

 
startdate, stopdate, starttime, stoptime, totaltime 

他们在格式YYYY-MM-DDHH-MM

我如何获得totaltimeHH-MM格式(有时启动和停止通过午夜)

谢谢

回答

0

使用TIMEDIFF将返回00:00:00.00000 //这种格式

TIMEDIFF('2013-11-20 12:01:00', '2010-11-19 12:00:00') 

,或者你可以隐蔽到秒

TIME_TO_SEC(TIMEDIFF('2013-11-20 12:01:00', '2010-11-19 12:00:00')) 
0

尝试这种方式

UPDATE table1 
    SET totaltime = TIMEDIFF(ADDTIME(stopdate, stoptime), 
          ADDTIME(startdate, starttime)); 

这里是SQLFiddle演示

更新:这是一个午夜时间的例子。

 
mysql> CREATE TABLE Table2 
    -> (`startdate` date, 
    -> `stopdate` date, 
    -> `starttime` time, 
    -> `stoptime` time, 
    -> `totaltime` time); 
Query OK, 0 rows affected (0.02 sec) 

mysql> INSERT INTO Table2 VALUES 
    -> ('2013-11-27', '2013-11-28', '11:00', '00:00', NULL), 
    -> ('2013-11-27', '2013-11-28', '00:00', '15:00', NULL), 
    -> ('2013-11-27', '2013-11-28', '00:00', '00:00', NULL); 
Query OK, 3 rows affected (0.01 sec) 
Records: 3 Duplicates: 0 Warnings: 0 

mysql> UPDATE table2 
    -> SET totaltime = TIMEDIFF(ADDTIME(stopdate, stoptime), 
    ->        ADDTIME(startdate, starttime)); 
Query OK, 3 rows affected (0.01 sec) 
Rows matched: 3 Changed: 3 Warnings: 0 

mysql> SELECT * FROM table2; 
+------------+------------+-----------+----------+-----------+ 
| startdate | stopdate | starttime | stoptime | totaltime | 
+------------+------------+-----------+----------+-----------+ 
| 2013-11-27 | 2013-11-28 | 11:00:00 | 00:00:00 | 13:00:00 | 
| 2013-11-27 | 2013-11-28 | 00:00:00 | 15:00:00 | 39:00:00 | 
| 2013-11-27 | 2013-11-28 | 00:00:00 | 00:00:00 | 24:00:00 | 
+------------+------------+-----------+----------+-----------+ 
3 rows in set (0.00 sec) 

+0

此更新为我工作不错,但在经过午夜的情况下,我得到负的总 – user3048250

+0

@ user3048250使用'timeDiff测量(later_date_time,former_date_time)'取得积极的结果。 –

+0

奇怪的事情发生时,通过00.00时,它将从开始时间减去停止时间并使其为负数。 – user3048250