表名:时间日志
TimeLogID | EmployeeID | TimeLog
------------------------------------------
1 | 1 | 1/1/2013 11:00 PM
2 | 1 | 1/2/2013 07:00 AM
3 | 1 | 1/2/2013 11:00 PM
4 | 1 | 1/3/2013 07:00 AM
表名:时间表
ScheduleID | EmployeeID | TimeIN | TimeOUT
----------------------------------------------
1 | 1 | 11:00 PM | 07:00 AM
我这里的问题是,如果某位员工在晚上 11 点开始工作,然后在早上 7 点结束,我该如何查询来计算他或她花费的时间。希望有人能帮我解决这个问题。谢谢。
基本上,我需要每个工作日的工作时间。
最佳答案
这是仅用于计算时间差异的 Oracle 查询。我认为如果将 dual 替换为表,它应该可以在任何 SQL 中使用。有 LAG/LEAD 函数可以比较上一行/下一行的值,但我不知道这些函数在您的 SQL 版本中是否可用。我希望这对你有用:
SELECT trunc(mydate / 3600) hr
, trunc(mod(mydate, 3600) / 60) mnt
, trunc(mod(mydate, 3600) / 60 /60) sec
FROM
(
SELECT (to_date('01/02/2013 23:00:00', 'mm/dd/yyyy hh24:mi:ss') -
to_date('01/01/2013 07:00:00', 'mm/dd/yyyy hh24:mi:ss')) * 86400 mydate
FROM dual
)
/
关于mysql - SQL 查询计算从前几天开始到第二天结束的小时数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14562277/