2013-08-22 179 views
4

我需要在SQLite的排序的日期通过查询在时间戳格式日期排序

我尝试这样做查询,但没有效果很好

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

我需要排序的日期,就像

SQLite的查询

从今天到前年1

从今天到30天前

从今天到7天前

这些是在DB

enter image description here

索里对于英文不好的日期......

回答

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列来将其移至其他数据库。

Here's a live SQL Fiddle demo.

+0

但是什么是时间戳。是unix还是其他 – sarabu

+1

看起来像java时间戳,即1970年1月1日以来的毫秒数。所以乘数应该是1000而不是100. – laalto

+0

@laalto看起来像复制数据时我错过了零。这确实使*方式对我更有意义。 ;) – rutter

1

不该它只是

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

未解决我的问题。没有日期显示该查询 – sarabu

+0

然后,你需要'日期(时间戳)'而不是'*'。 –

+0

@CL。该查询的问题是其不显示任何记录。它显示为空,我需要所有的字段将该对象给适配器 – sarabu

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

+0

@Kartheek只需将时间戳除1000(编辑查询)。 –