我有以下字段
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小时。
请帮我解决一下
答案 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(OutTime
,InTime
))))AS总计FROM wp_ag_punch
,其中UserId = $ userid和TodayDate ='$ today'