【问题标题】:Getting last 12 hours worth of entries SQLite获取最近 12 小时的 SQLite 条目
【发布时间】:2014-06-16 03:47:44
【问题描述】:

我正在尝试从带有 android 的 SQLite 数据库中获取最近 12 小时的条目。

我想知道这是否可能?

我的日期格式是"yyyy-MM-dd HH:mm:ss.SSS",使用简单的日期格式。

我的表中有一个 TEXT 类型的 CREATED_AT 列。

我已经走到这一步了:

SELECT * FROM " + ENTRIES_TABLE + " WHERE " + CREATED_AT + ..."

另外,CREATED_AT 列是 TEXT 而不是日期时间类型是否重要?

谢谢

【问题讨论】:

  • 如果您的字符串匹配,那么您是否正在执行= 并不重要,但您的代码没有正确解释这一点。虽然也不是一个好主意。如果你想做less thanbetween 会发生什么
  • 您应该考虑使用 sqlite INTEGER 而不是 STRINGCREATED_AT 存储为 UNIX 时间戳。您将使用长变量读取代码中的值。这并不能直接回答您的问题,但有助于将来进行比较。
  • 您还应该考虑接受过去问题的答案。

标签: java android sqlite datetime


【解决方案1】:

SQLite 使用dynamic typing;该列是否声明为 TEXT 或 DATETIME 或 FLUFFY BUNNIES 无关紧要。

SQLite 的日期格式旨在使字符串比较正常工作。 要从时间戳中减去 12 小时,请使用 built-in date functions 之一:

SELECT *
FROM Entries
WHERE CreatedAt >= datetime('now', '-12 hours')

(SQLite 日期函数默认使用 UTC;检查表的值是否使用某些本地时区。)

【讨论】:

    【解决方案2】:

    作为一个文本字段,你不能做很多事情。事实上,您唯一可以一直工作而不会带来很大痛苦的选择是解析数据并手动进行。痛苦的路线会直接查看字符串比较,但如果您处理的是 1 月 1 日中午之前的情况,这会变得很复杂。

    在 sqlite 中处理日期的一种更好的方法,也是最好的方法,是使用 Unix 时间戳。然后,只需选择时间标签大于当前时间减去 12 小时的任何内容,就可以了。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2014-03-14
      • 2016-03-20
      • 1970-01-01
      • 2015-11-26
      • 2020-03-22
      • 2012-07-03
      • 2015-09-10
      相关资源
      最近更新 更多