【问题标题】:SQLite query to compare dates用于比较日期的 SQLite 查询
【发布时间】:2018-06-21 02:55:02
【问题描述】:

我在 SQLite 数据库的一个表(history)中有两个文本列(valid_fromvalid_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);

没有任何记录。我错过了什么吗?

【问题讨论】:

  • 不要在 SQLite 中以dd/MM/yyyy 格式存储您的日期。始终使用 ISO 格式 yyyy/MM/dd 代替。有一些变通方法,但它们很难看,最好修复您的数据。
  • @TimBiegeleisen - 它已经像这样存储了。我对此无能为力。我只需要找到这种格式的解决方案。

标签: date sqlite


【解决方案1】:

您应该始终将您的日期信息以 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';

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2013-09-16
    • 2020-04-21
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-12-10
    • 1970-01-01
    相关资源
    最近更新 更多