设置mysql数据库来记录任务

时间:2017-08-18 21:54:48

标签: mysql sql database time task

我正在尝试使用PHPMyAdmin设置MySQL数据库。在我深入研究之前,我需要建议并进行查询。我像这样设置了表格。

id: primary ket
time_in: date
time_out: date
task: varchar (128)
business: varchar (128)

我需要做的就是跟踪每项任务和业务花费的时间。这是做这件事的好方法还是有更好的方法?

如果这是正确的,那么我试图弄清楚如何查询时间。这就是我提出的查询,但它远非我想要的。

SELECT `Task`,`Business`, (SELECT `Time-Out` - `Time-In`) as `total time` FROM `Sheet`

有没有办法将总时间转换为更易读的格式?

2 个答案:

答案 0 :(得分:0)

您需要使用TIMEDIFF(end_time,start_time)和TIME_TO_SEC(时间)将差异转换为总秒数。然后,您可以将数学上的秒数转换为您想要的任何格式。

所以在每项任务的时间:

 select ID
       ,task
       ,business
       ,time_to_sec(timediff(time_out, time_in)) as duration
 from sheet

按任务和业务汇总:

 select task
       ,business
       ,sum(time_to_sec(timediff(time_out,time_in))) as total_time
 from sheet
 group by task
         ,business 

答案 1 :(得分:0)

除非您在几天内跟踪时间,否则我建议您对TIMEDATETIME列使用time_intime_out

就个人而言,我可能会使time_out可以为空,以便跟踪当前的活动(我已经开始但尚未完成)。

不需要使用子选择来减去时间戳,您也可以内联减去这两列(只需删除SELECT关键字)。对于格式化,您可以使用TIMEDIFF函数:

SELECT '12:00:00' - '10:45:00';
-> 2

SELECT TIMEDIFF('12:00:00', '10:45:00');
-> '01:15:00'

这将使您的查询:

SELECT `Task`, `Business`, TIMEDIFF(`Time-Out`, `Time-In`) as `total time` FROM `Sheet`

如果 使time_out(或Time-Out)可以为空,您需要在查询中考虑到这一点:

SELECT TIMEDIFF(NULL, '10:45:00');
-> NULL

所以正在进行的任务会给total time NULL。如果你想知道你已经工作了多长时间,可以将它包装在一个IFNULL函数中并获得当前时间:

SELECT TIMEDIFF(IFNULL(`Time-Out`, NOW()), `Time-In`);
-> '01:15:00' if `Time-Out` is 12:00:00 and `Time-In` is 10:45:00
-> '02:05:13' if `Time-Out` is NULL and it's currently 12:50:13 (server time)