如何使用sqlite获取最近6个小时的数据

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了如何使用sqlite获取最近6个小时的数据相关的知识,希望对你有一定的参考价值。

码:

.mode column
.width 40 20 20 6 10 90
.headers off
select name, datetime("start time","unixepoch","localtime"), datetime("end time","unixepoch","localtime"), "end time"-"start time", "completion status", "failed clients list"
from  "savegroup job"
where datetime("end time","unixepoch","localtime") >= datetime("now", "-6 hours")
and "completion status" like "%failed%";

>= datetime("now", "-6 hours")不起作用。

我需要获取过去6小时的最后输入数据。

谢谢

答案

我相信您的问题很可能是开始时间和结束时间列中的值未以正确的格式保存。这是为了应用unixepoch修饰符,然后值必须是DDDDDDDDDD格式。

按照 :-

“unixepoch”修饰符(11)仅在紧跟DDDDDDDDDD格式的时间字符串后才起作用。此修饰符导致DDDDDDDDD不像通常那样被解释为Julian日数,而是解释为Unix Time - 自1970年以来的秒数。如果“unixepoch”修饰符不遵循表达DDDDDDDDDD形式的时间字符串自1970年以来的秒数,或者如果其他修饰符将“unixepoch”修饰符与之前的DDDDDDDDD分开,则行为未定义。对于3.16.0(2017-01-02)之前的SQLite版本,“unixepoch”修饰符仅适用于0000-01-01 00:00:00和5352-11-01 10:52:47之间的日期(unix times of -62167219200至106751991167)。

SQL As Understood By SQLite - Date And Time Functions - Modifiers

例如,考虑以下内容(见评论): -

DROP TABLE IF EXISTS 'savegroup job';
CREATE TABLE IF NOT EXISTS 'savegroup job' (name TEXT,'start time' TEXT, 'end time' TEXT, 'completion status' TEXT);
INSERT INTO 'savegroup job' VALUES

  -- store values in DDDDDDDDDD format
    ('Name001',strftime('%s','2018-01-01 10:30'),strftime('%s','2018-01-01 12:30'),'this failed'),
    ('Name002',strftime('%s','2018-02-01 10:30'),strftime('%s','2018-02-01 12:30'),'this failed'),
    ('Name003',strftime('%s','2018-03-01 10:30'),strftime('%s','2018-03-01 12:30'),'this failed'),
    ('Name004',strftime('%s','now'),strftime('%s','now','+6 hours'),'this failed'),
    ('Name005',strftime('%s','now','+3 hours'),strftime('%s','now','+14 hours'),'this failed'),

    -- store values in "YYYY-MM-DD HH:MM:SS" format 
    ('Name006','2018-01-01 10:30','2018-01-01 12:30','this failed'),
    ('Name007','2018-01-01 10:30','2018-01-01 12:30','this failed'),
    ('Name008','2018-01-01 10:30','2018-01-01 12:30','this failed'),
    ('Name009',datetime('now'),datetime('now','+6 hours'),'this failed'),
    ('Name010',datetime('now','+3 hours'),datetime('now','+14 hours'),'this failed')
;
-- Show all data
SELECT * FROM 'savegroup job';

-- The query from the question
select name, datetime("start time","unixepoch","localtime"), datetime("end time","unixepoch","localtime"), "end time"-"start time", "completion status", "failed clients list"
from  "savegroup job"
where datetime("end time","unixepoch","localtime") >= datetime("now", "-6 hours")
and "completion status" like "%failed%";

结果

All data :-

enter image description here

Your Query (it does work if the values are store in the correct format) :-

enter image description here

处理当前存储的数据

假设问题是列的开始时间和结束时间确实存储值,如“YYYY-MM-DD HH:MM:SS”格式(名称为Name006 - Name010的行),则以下查询将起作用: -

-- Modified query from the question
SELECT name, 
    datetime("start time"), 
    datetime("end time"),
    strftime('%s',datetime("end time"))-strftime('%s',datetime("start time")), 
    "completion status", 
    "failed clients list"
FROM  "savegroup job"
-- where strftime('%s',"end time","unixepoch","localtime") >= strftime('%s',"now", "-6 hours") and "completion status" like "%failed%";
WHERE strftime('%s',"end time") >= strftime('%s',datetime('now','-6 hours'))
    AND "completion status" LIKE '%failed%'
;

导致 :-

enter image description here

以上是关于如何使用sqlite获取最近6个小时的数据的主要内容,如果未能解决你的问题,请参考以下文章

如何使用光标和循环显示来自 sqlite 的片段的 recyclerview

从 2 个不同片段的 sqlite 中的 2 个表中获取信息

当我从用户获取数据并将其保存到 SQLite 数据库中时,我应该怎么做才能使列表视图在片段中工作

如何在片段内的 recylerview 列表中显示 SQLite 数据库数据?

iPhone/Sqlite - 如何仅从服务器获取更改的数据?

无法从片段中的 SQLite 获取数据