日期排序的Sqlite查询

4

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

我尝试了这个查询,但效果不佳。

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

我需要按日期排序,例如:

从今天到一年前

从今天到30天前

从今天到7天前

这些是数据库中的日期

enter image description here

对于糟糕的英语表示抱歉。
3个回答

3

以下是我得到的内容:

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

需要注意的一些事项:

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

你想要从今天到一年前(2012年)的日期吗?如果是这样,上面的查询就可以了;如果你想要从今天到明年同期(2014年)的日期,交换比较运算符即可。

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

这里有一个实时的SQL Fiddle演示。


1
看起来像是Java时间戳,即自1970年1月1日以来的毫秒数。因此乘数应该是1000而不是100。 - laalto
@laalto 看起来我在复制数据时漏掉了一个零。这让我感到更有意义。 ;) - rutter

1

试试这个:

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

1
这些日期不是 unixepoch 格式,因为我尝试使用 SELECT datetime(1377175845000, 'unixepoch')SELECT DATE(1377175845000, 'unixepoch') 进行查询,但它们显示出错误的格式。而格式转换器在此处 http://www.epochconverter.com/ 可以显示正确的日期格式。 - sarabu
@Kartheek 只需将时间戳除以1000(编辑查询)。 - Joel Arnold

1
“应该只是


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

然后您需要使用 date(timestamp) 而不是 * - CL.
@CL。这个查询的问题是它没有显示任何记录。它显示为空,我需要所有字段将这些对象传递给适配器。 - sarabu

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接