在SQL查询中需要小时差异

时间:2016-07-18 13:14:34

标签: sql sqlite time

寻找可以检索两次时差的查询。以下是示例:

EmpID   EmpOnTime   EmpOffTime
1       2:45        3:00
2       1:00        4:00
3       1:35        2:55
4       2:45        3:20

结果应该是:

For EmpID 1 Time diffrence: 0:15
For EmpID 2 Time diffrence: 3:00
For EmpID 3 Time diffrence: 1:20
For EmpID 4 Time diffrence: 0:35

我使用以下查询给出了错误的结果 查询:

select offTime, onTime, (strftime('%s',offTime) - strftime('%s',onTime)) / 60 AS diffrence 
from emplyoee;

2 个答案:

答案 0 :(得分:2)

这个比最初的想法更棘手。这是您需要的SQL,但是您的输入数据需要采用不同的格式才能使其正常工作。

select EmpId, 
       offTime, 
       onTime, 
       time(((strftime('%s', offTime) - strftime('%s', onTime)) / 60), 'unixepoch') as difference
  from employee;

我必须将数据存储在YYYY-MM-DD HH:MM:SS:

2019-07-18 03:00:00

否则,如果你的意思是am或pm,则SQLite会感到困惑,并且%s无法计算,因为它返回自1970-01-01以来的秒数。

答案 1 :(得分:0)

我认为你可以使用它:

SELECT
  EmpID,
    time(
      julianday("2000-01-01 00:00:00") +
      julianday(substr("0" || EmpOffTime || ":00", 1, 8)) -
      julianday(substr("0" || EmpOnTime || ":00", 1, 8))) As diff
FROM 
  yourTable

<强> [SQL Fiddle Demo]

您的时间需要在最后使用:00完成,有时在0处开始使用substr("0" || yourTime || ":00", 1, 8)处理,然后使用julianday()您可以找到两个日期的差异,我也将julianday("2000-01-01 00:00:00")添加到差异中以获得有效的时间值等等。