SQLite查询比较日期

时间:2018-06-21 02:55:03

标签: date sqlite

我在SQLite数据库的表(历史记录)中有两个文本列( valid_from valid_to )。 dd / MM / yyyy 格式。

现在我正在运行以下查询以获取 2018年6月1日至2018年6月30日之间的所有记录,但没有得到任何结果:

尝试1:

SELECT * FROM history WHERE valid_from >= datetime('01/06/2018') AND valid_to <= datetime('30/06/2018');

尝试2:

SELECT * FROM history WHERE cast(strftime('%Y%m%d', valid_from) as integer) >= cast(strftime('%Y%m%d', '01/06/2018') as integer) AND cast(strftime('%Y%m%d', valid_to) as integer) <= cast(strftime('%Y%m%d', '30/06/2018') as integer);

没有任何记录。我想念什么吗?

1 个答案:

答案 0 :(得分:2)

您应该始终将日期信息以ISO格式存储在SQLite中,其中年份在月份之前,月份在日期之前。原因是在SQLite中日期仅以纯文本格式存储,并且您当前的格式无法正确排序。解决方法是,您可以尝试以下查询:

SELECT *
FROM history
WHERE
    SUBSTR(valid_from, 7, 4) || '/' || SUBSTR(valid_from, 4, 2) ||
        '/' || SUBSTR(valid_from, 1, 2)
        BETWEEN '2018/06/01' AND '2018/06/30';

在这里,我们只是为每个日期构建正确的日期格式。但是,最好的长期解决方案是修复您的日期数据。