mysql - SQL 查询计算从前几天开始到第二天结束的小时数

标签 mysql sql sql-server

表名:时间日志

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/

相关文章:

sql-server - 为什么选择日期很慢

asp.net - ASP.NET 应用程序中的 connectionString 超时应该有多长? (sql客户端)

php - 优化从非常大的 MySQL 表中提取数据的算法

Java 应用程序未按原样显示数据库

python - SQL "partition by"Python/R 中的类似功能

sql - 遍历大量 "if exists update, else insert"语句?

MySQL根据另一个表中的日期计算一个表中的行数

php - 如何在 php 中将 datediff 设置为变量

c# - 如何编写一列返回多个结果的SQL查询C#

sql-server - 我如何将 IDENTITY_INSERT 设置为 On