【问题标题】:How to test for dates earlier than the current date in SQLite如何在 SQLite 中测试早于当前日期的日期
【发布时间】:2013-03-30 22:38:35
【问题描述】:

我正在使用 SQLite 存储一些数据,并且我知道日期对象不能存储在 SQLite 数据库中,所以我使用的是字符串。

我的问题是我想检查表格的最早日期。因此,如果有 2 张卡,其中一张是 01/04/2013 和 04/05/2013,我想识别 01/04/2013 是较早的日期并返回该行。

到目前为止,我提出了 2 个解决方案:

对数据库的多个查询

我已经能够实现一个成功的解决方案,它将遍历数据库并将日期对象减 1,然后将其用作匹配日期的字符串。问题是数据库可能需要查询 100 次才能找到最早的日期。这样做是不好的做法吗?

遍历结果集

另一种可能性是遍历表中所有抽认卡的结果集。但是,这将涉及 2 个循环,一个循环遍历表中的每一行,这将位于一个循环中,该循环会将日期减 1。

我觉得这两个都不是很好的解决方案。我想知道是否有人可以帮助我以更有效的方式实现这一目标?

【问题讨论】:

    标签: java database sqlite loops resultset


    【解决方案1】:

    如果您以YYYY-MM-DD 格式存储日期,则可以像使用实际的日期数据类型一样使用<>BETWEEN。使用YYYY-MM-DD 日期格式,字典顺序与时间顺序相同。

    另一个好处是YYYY-MM-DD 日期格式与SQLite Date And Time Functions 兼容。

    【讨论】:

    • 我尝试使用类似的东西,我试图选择与当前日期之间差异最大的行:resultSet = statement.executeQuery("SELECT MAX(date(now) - date('interval')), id FROM flashcard"); 但是,无论日期如何,它都只会返回同一行.你能解释一下我做错了什么吗?
    • @JoeDawtry 看起来您只是想要最短日期。当你运行"SELECT MIN(date(date_column_name)) FROM flashcard" 时会发生什么?
    • 错误代表我,我的表中有剩余行的空值。您的方法效果很好,非常感谢!
    【解决方案2】:

    将日期存储为自 1970 年 1 月 1 日以来的天数。

    这样,SQL就变成了

    Select MIN(days)
    

    【讨论】:

    • 这是一个非常简单易实现的方法,好主意。非常感谢。
    猜你喜欢
    • 1970-01-01
    • 2015-01-04
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-02-08
    • 2014-02-19
    • 1970-01-01
    • 2011-05-25
    相关资源
    最近更新 更多