计算sqlite中的时差

icomxhvb  于 2021-07-26  发布在  Java
关注(0)|答案(1)|浏览(365)

在我的数据中,表格如下所示:
周日10:00-22:00
周六10:00-22:00
星期一10:00-19:00
周二10:00-18:00
星期五10:00-19:00
我不知道如何计算时间差。
我需要知道每个人的持续时间。谢谢!
或者给我一个提示,那完全没关系。

u0sqgete

u0sqgete1#

您可能需要使用几个函数 instr , substr 以及 julianday 得到你需要的东西。
table
假设你的table是这样的:

create table test (day, timespan);
insert into test values ('Sunday', '10:00-22:00');
insert into test values ('Saturday', '10:00-22:00');
insert into test values ('Monday' , '10:00-19:00');
insert into test values ('Tuesday', '10:00-18:00');
insert into test values ('Friday', '10:00-19:00');

查询
运行以下查询,以小时为单位显示时间

select
  day,
  timespan,
  round( 24 * (
    julianday('2000-01-01 ' || substr(timespan, instr(timespan, '-')+1, 10) || ':00') - 
    julianday('2000-01-01 ' || substr(timespan, 1, instr(timespan, '-')-1) || ':00')
  ), 1) as hrs
from test;

结果

day         timespan     hours        
----------  -----------  ----------
Sunday      10:00-22:00  12.0      
Saturday    10:00-22:00  12.0      
Monday      10:00-19:00  9.0       
Tuesday     10:00-18:00  8.0
Friday      10:00-19:00  9.0

解释
如果您的时间存储在以下列中: 10:00-22:00 ,那么我们应该把开始时间和结束时间分开。为此,我们找到了 - 使用 instr . 例如, instr('10:00-22:00', '-') 我给你6英镑。这意味着 - 在第六位。
知道破折号在哪里,我们可以通过从开始到破折号提取字符来找到开始时间。我们可以通过从破折号开始到字符串末尾的字符来获取结束日期。我只是选择在破折号后用 substr .
因为我们只有一个时间和一个日期,所以我创建了一个虚构的日期2000-01-01,并将开始时间预先添加到它来创建开始日期/时间。我对结束日期也做了同样的事。 julianday “开始日期”和“结束日期”给出了从某一天开始经过的天数,正好是美国独立日。所以,从开始日期的julianday中减去结束日期的julianday将得到天数。乘以24得到小时数。

相关问题