【问题标题】:Sqlite query for date sortingSqlite查询日期排序
【发布时间】:2013-08-22 12:56:33
【问题描述】:

我需要通过 SQLite 中时间戳格式的查询来获取排序日期

我试过这个查询,但效果不好

SELECT  * FROM  allmessages WHERE  TIMESTAMP <=  DATE('now','-365 day') AND  TIMESTAMP >=  DATE('now')  order by  TIMESTAMP  DESC

我需要像

这样的排序日期

从今天到 1 年前

从今天到 30 天之前

从今天到前 7 天

这些是数据库中的日期

对不起英语不好...

【问题讨论】:

    标签: android sqlite date


    【解决方案1】:

    这是我得到的:

    SELECT *
    FROM allmessages
    WHERE timestamp <= strftime('%s', 'now')*1000
    AND timestamp >= strftime('%s', 'now', '-365 days')*1000;
    

    一些注意事项:

    您的时间戳似乎是自纪元以来的毫秒数?我将 SQLite 的内部时间戳乘以 1000 以反映这一点。

    您想要今天和一年前(2012 年)之间的日期吗?如果是这样,上面的查询就可以了;如果您想要从今天到一年后的日期(2014 年),请翻转比较运算符。

    我正在使用 SQLite 的内部 rowid 列;您可以通过将其替换为您自己的 id 列来将其移动到其他数据库。

    Here's a live SQL Fiddle demo.

    【讨论】:

    • 看起来像 java 时间戳,即自 1970 年 1 月 1 日以来的毫秒数。所以乘数应该是 1000 而不是 100。
    • @laalto 看起来我在复制数据时错过了一个零。这确实让我觉得 way 更有意义。 ;)
    【解决方案2】:

    不应该是这样的

    SELECT  * FROM  allmessages WHERE  DATE(TIMESTAMP) >=  DATE('now','-365 day') AND   DATE(TIMESTAMP) <  DATE('now')  order by  TIMESTAMP  DESC
    

    【讨论】:

    • 那么你需要date(timestamp)而不是*
    • @CL。该查询的问题是它没有显示任何记录。它显示为空,我需要所有字段来将该对象提供给适配器
    【解决方案3】:

    试试这个:

    SELECT  * FROM  allmessages WHERE  DATE(TIMESTAMP/1000, 'unixepoch') >=  DATE('now','-365 day') AND   DATE(TIMESTAMP/1000, 'unixepoch') <  DATE('now')  order by  TIMESTAMP  DESC
    

    查看更多详情(查看时间戳):http://www.sqlite.org/lang_datefunc.html

    【讨论】:

    • 这些日期不在unixepoch 中,因为我使用SELECT datetime(1377175845000, 'unixepoch');SELECT DATE(1377175845000, 'unixepoch') 进行了尝试,它们显示错误的格式。格式转换器显示正确的日期here
    • @Kartheek 只需将时间戳除以 1000(编辑查询)。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-10-13
    • 1970-01-01
    • 2012-12-14
    • 1970-01-01
    • 2019-10-14
    相关资源
    最近更新 更多