Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/mysql/59.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 phpmyadmin中用于计算工作小时数的虚拟列_Mysql_Phpmyadmin - Fatal编程技术网

Mysql phpmyadmin中用于计算工作小时数的虚拟列

Mysql phpmyadmin中用于计算工作小时数的虚拟列,mysql,phpmyadmin,Mysql,Phpmyadmin,编辑:在@fubar的帮助下回答 TIME_TO_SEC(DATE_SUB(TIMEDIFF(finish_time, start_time), INTERVAL break MINUTE)) / 3600 我有一张桌子: 开始时间作为时间 完成时间作为时间 休息时间(员工休息的分钟数) 以小数形式表示的总小时数,应为员工工作的小时数。因此,如果开始时间为5:00,结束时间为13:00,休息时间为30,则总时间应为7.5小时 在phpMyAdmin中,将total_hours列设置为VIRT

编辑:在@fubar的帮助下回答

TIME_TO_SEC(DATE_SUB(TIMEDIFF(finish_time, start_time), INTERVAL break MINUTE)) / 3600

我有一张桌子:
开始时间作为时间
完成时间作为时间
休息时间(员工休息的分钟数)
以小数形式表示的总小时数,应为员工工作的小时数。因此,如果开始时间为5:00,结束时间为13:00,休息时间为30,则总时间应为7.5小时

在phpMyAdmin中,将total_hours列设置为VIRTUAL,我应该输入什么表达式?我试过了

TIMEDIFF(finish_time, start_time)

首先,它给了我70000.00(参数为12:00:00,5:00:00),这让我意识到我不知道自己在做什么,我应该问问别人。

下面的
选择将为您提供总工作时间

SELECT TIME_TO_SEC(DATE_SUB(TIMEDIFF(`finish_time`, `start_time`), INTERVAL `break` MINUTE)) / 3600 AS total_hours;
要将其分解为其组成部分:

查找开始和结束时间之间的时间差

SELECT TIMEDIFF('12:00:00', '05:00:00')
减去以分钟为单位的中断间隔

SELECT DATE_SUB(TIMEDIFF('12:00:00', '05:00:00'), INTERVAL 30 MINUTE);
将时间差转换为秒

SELECT TIME_TO_SEC(DATE_SUB(TIMEDIFF('12:00:00', '05:00:00'), INTERVAL 30 MINUTE));
通过除以60*60将时间差(以秒为单位)转换为小时

SELECT TIME_TO_SEC(DATE_SUB(TIMEDIFF('12:00:00', '05:00:00'), INTERVAL 30 MINUTE)) / 3600 AS total_hours;

当我运行
时,选择TIMEDIFF('12:00','5:00'),我得到
07:00:00
。您如何获得
70000.00
?您是否正在以某种方式投射或操纵结果?抱歉,它是05:00:00和12:00:00,因此70000.00可能是7:00:00的时间值。字段数据类型是decimal(26,2),如果这有助于复制我刚才所做的,那么字段类型是decimal。我已将其更改为Time,但我仍然需要虚拟环境下phpmyadmin中的表达式来从我从TIMEDIFF()获得的时间中减去休息分钟数。DATEADD(minutes,-break,(TIMEDIFF(finish_time,start_time)))给了我一个错误“列total_hours不允许使用函数或表达式”太好了,谢谢!对于虚拟表达式,将其作为TIME-TO-SEC(DATE-SUB(TIMEDIFF(finish-TIME,start-TIME),INTERVAL-break-MINUTE))/3600输入,它就工作了