Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/mysql/64.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Mysql sql中的时差。午夜总时间_Mysql_Sql_Datetime - Fatal编程技术网

Mysql sql中的时差。午夜总时间

Mysql sql中的时差。午夜总时间,mysql,sql,datetime,Mysql,Sql,Datetime,这里真的需要帮助 具有具有以下列的表 startdate, stopdate, starttime, stoptime, totaltime startdate、stopdate、starttime、stoptime、totaltime 它们的格式为YYYY-MM-DD和HH-MM 如何获得HH-MM格式的totaltime(有时开始和停止时间超过午夜) 谢谢使用TIMEDIFF将以00:00:00.00000//此格式返回 TIMEDIFF('2013-11-20 12:01:00', '20

这里真的需要帮助

具有具有以下列的表

startdate, stopdate, starttime, stoptime, totaltime startdate、stopdate、starttime、stoptime、totaltime 它们的格式为
YYYY-MM-DD
HH-MM

如何获得
HH-MM
格式的
totaltime
(有时开始和停止时间超过午夜)


谢谢

使用TIMEDIFF将以00:00:00.00000//此格式返回

TIMEDIFF('2013-11-20 12:01:00', '2010-11-19 12:00:00')
或者你可以隐蔽到sec

TIME_TO_SEC(TIMEDIFF('2013-11-20 12:01:00', '2010-11-19 12:00:00'))
这样试试看

更新表1
设置totaltime=TIMEDIFF(ADDTIME(停止日期,停止时间),
ADDTIME(startdate,starttime));
这里是演示

更新:下面是一个午夜时间的示例

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) mysql>创建表表2 ->(`startdate`日期, ->`stopdate`日期, ->‘开始时间’, ->“停止时间”时间, ->`总时间'时间); 查询正常,0行受影响(0.02秒) mysql>插入到表2中的值 ->('2013-11-27','2013-11-28','11:00','00:00',空), ->('2013-11-27','2013-11-28','00:00','15:00',空), ->('2013-11-27','2013-11-28','00:00','00:00',空); 查询正常,3行受影响(0.01秒) 记录:3个重复:0警告:0 mysql>更新表2 ->设置totaltime=TIMEDIFF(ADDTIME(停止日期,停止时间), ->ADDTIME(startdate,starttime)); 查询正常,3行受影响(0.01秒) 匹配的行:3个已更改:3个警告:0 mysql>从表2中选择*; +------------+------------+-----------+----------+-----------+ |开始日期|停止日期|开始时间|停止时间|总时间| +------------+------------+-----------+----------+-----------+ | 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行(0.00秒)
这个更新对我来说效果很好,但如果过了午夜,我会得到否定的结果total@user3048250使用
timediff(晚一点的日期时间,前一点的日期时间)
可以得到肯定的结果。奇怪的事情发生了,当超过00.00时,它会从开始时间减去停止时间,并将其设为否定。@user3048250查询本身是完全正确的。负值表示停止日期时间<开始日期时间。请参阅更新的答案,例如,所有可能的午夜时间值组合。再说一次,它工作得很好。谢谢你的帮助。在我的表格中输入了错误的类型:P现在工作正常了。再次向你们所有人开火。