无法计算适当的总小时数?

时间:2016-01-04 12:33:07

标签: mysql

我有以下字段

Date        InTime    OutTime   Status
2016-01-04  10:19:00  05:10:00  Out

我在下面尝试了查询

SELECT sum(time_to_sec(timediff(CONCAT(`TodayDate`,' ',`OutTime`),CONCAT(`TodayDate`,' ',`InTime`)))/ 3600) as total FROM `wp_ag_punch` where UserId=$userid and TodayDate='$today'

但是它给了-5.15小时。

请帮我解决一下

5 个答案:

答案 0 :(得分:2)

您正在使用错误的系统架构,而不是使用两个文件日期和时间,只使用一个适用于您所有情况的文件 请使用以下结构

DatetimeIn (timestamp)  DatetimeOut (timestamp)  Status
1451912118              1451912140               Out

现在直接做

Select DatetimeIn - DatetimeOut as output

将以秒为单位输出

output
------
22

答案 1 :(得分:1)

您应该将datetime字段存储为DateTime数据类型,而不是尝试将两个字段保持为单独的。因此,对于初始数据库设置,您需要:

| DateTimeIn          | DateTimeOut         | Status |
|---------------------|---------------------|--------|
| 2016-01-04 10:19:00 | 2016-01-04 05:10:00 | Out    |

反过来,可以使用以下内容查询两个时间戳之间的差异:

SELECT TIMESTAMPDIFF(MINUTE,DateTimeIn,DateTimeOut) AS total_minutes

会返回:

| total_minutes |
|---------------|
| -309          |

假设后期实际上是下午5点,数据可以表示为:

| DateTimeIn          | DateTimeOut         | Status |
|---------------------|---------------------|--------|
| 2016-01-04 10:19:00 | 2016-01-04 17:10:00 | Out    |

和查询:

SELECT TIMESTAMPDIFF(MINUTE,DateTimeIn,DateTimeOut) AS total_minutes

将返回:

| total_minutes |
|---------------|
| 411           |

或者,如果您想要以小时为单位的时间跨度,则只需更改该部分查询:

SELECT TIMESTAMPDIFF(HOUR,DateTimeIn,DateTimeOut) AS total_hours

得到结果:

| total_hours   |
|---------------|
| 6             |

答案 2 :(得分:0)

实际上你的外出时间应该是17:10:00'或日期应根据mysql时间格式不同。

在看到您的记录格式之后,您不需要按时间联系日期,而只是按照以下方式按时计算 -

SELECT SUM(TIME_TO_SEC(TIMEDIFF(`OutTime`,`InTime`)))/ 3600 AS total FROM `wp_ag_punch` WHERE UserId=$userid AND TodayDate='$today'

答案 3 :(得分:0)

尝试以下查询:

SELECT (time_to_sec(timediff(OutTime,Intime)) / 3600) as total FROM `wp_ag_punch` where UserId=$userid and TodayDate='$today'

答案 4 :(得分:0)

我解决了它。只需将12小时格式更改为24小时格式并使用以下查询。

SELECT SEC_TO_TIME(SUM(TIME_TO_SEC(TIMEDIFF(OutTimeInTime))))AS总计FROM wp_ag_punch,其中UserId = $ userid和TodayDate ='$ today'