2011-06-15 82 views
0

我正在为我的应用程序使用SQLite数据库。Android中的SQLite日期查询

表的结构是这样:

_id : integer primary key 
name : text 
day : date 

我能够存储日期格式:dd-mmmmm-yyyy如。 15-June-2011

但是当我试图从数据库中检索按日期过滤的所有记录时,它将返回空值。

database.query(DATABASE_TABLE, new String[] { "strftime('%d-%mm-%Y',date('now'))","strftime('%d-%m-%Y',"+KEY_DAY+")" }, 
"strftime('%d-%m-%Y',date('now'))=" + KEY_DAY , null,null,null,null,null); 

即使有一些匹配的日期,它没有与黄鳝的日期匹配。

我已经通过SQLite的文档。但还没有找到任何解决方案。

我想有这样的:

select * from table where day=curdate(); 

我该怎么做同样的任务SQLite中? (是的,我可以灵活地更改存储在数据库中的日期格式)

对于同一个任务,其他的选择是什么?

+0

我怀疑%mm是正确的在你的字符串'%d-%mm-%Y' – 2011-06-15 05:30:37

+0

http://stackoverflow.com/questions/4013508/andorid-sqlite-date-comparation你尝试过吗? – 2011-06-15 05:38:26

+0

我不认为strftime是一个内置的SQLite函数。 – 2011-06-15 05:40:38

回答

3

在Java编程中,您可以将任何日期格式转换为长(以毫秒为单位),反之亦然。我的意见是在java中将格式的日期格式保存为长格式,然后将长时间的日期值存储在数据库中。在检索时,您也可以检索长整型值,然后根据您的预期日期格式进行格式化。我一直在使用这种类型的逻辑来处理几个应用程序。

谢谢 Deepak。

0

函数strftime('%d-%m-%Y',date('now'))返回一个字符串,数字格式的月份(从01到12)。据我所知,从the docs可以看出,没有格式说明符来返回月份的全名。

我想你必须使用数字月份说明符而不是名称来存储日期。

+0

所以我还必须更改日期格式,同时将其存储在数据库中?如果是,哪种格式最好呢? – 2011-06-15 05:39:06

+0

@Kartik - 这些选项在数据类型的文档中有描述。如果仅仅因为它们没有Unix时间的限制(在几十年内溢出32位并且在1​​970年1月1日之前出现问题),我会去使用ISO格式的TEXT或Julian date REAL。 – 2011-06-15 06:12:22