我是Sqlite的初学者,努力将查询组合成所需的内容。 :-(
谁能帮我吗?
我有给定的日期。在下面的示例中,此变量称为“ givenDate”,其类型为Java Date,因此格式为yyyy-MM-dd。
我还有一个名为“ main”的数据库表,其中包含“ ID”和“ Date”列。日期列条目采用ISO标准字符串格式。因此,条目如下所示:
ID Date
001 1949-08-13 06:29:21.000
002 1943-08-13 10:13:45.000
003 1948-08-13 09:12:32.100
004 etc.
将“日期”列与给定的日期“ givenDate”进行比较时,我需要从表“ main”中获取最近的10个日期的列表。
所以我需要:
将“日期”列中的每个日期与我给定的日期“ givenDate”进行比较
找出它们之间的绝对差异
按最小到最大差异排序
返回最小10个结果中每个结果的ID和日期
因此,如果给定日期为1948-09-13,则结果为:
003 1948-08-13 09:12:32.100
001 1949-08-13 06:29:21.000
002 1943-08-13 10:13:45.000
etc
DateDiff在Android中不起作用,因为该数据库是Sqlite数据库。
我试图做这样的事情:
String query =
"SELECT ID, Date" +
"FROM main" +
"WHERE Date IS NOT NULL" +
"ORDER BY ABS(date("+givenDate+") - Date) ASC" +
"LIMIT 10";
这似乎不起作用。我只得到了与给定日期中的年份相同且以升序排列的日期列表。日期差似乎并没有真正计算出日期差并给出最近的10。
我浏览了无数帖子,但找不到满足我需要的特定功能。
任何帮助将不胜感激。
谢谢,
西米:-)
答案是:
Format sqliteDateFormatter = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss.SSS");
String query2 =
"SELECT _id, Date " +
"FROM main " +
"WHERE Date IS NOT NULL " +
"ORDER BY ABS(JULIANDAY('" + sqliteDateFormatter.format(aDate) + "') - " + "JULIANDAY(Date)) " +
"LIMIT 10";
最佳答案
根据the documentation的说法,仅将Date
转换为字符串将导致SQLite无法理解的格式。您必须explicitly use the correct format。
此外,这些日期值只是字符串,因此您不能简单地减去它们。您必须先将它们转换为some numeric date format。
Format sqliteDateFormatter = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
String query = ... +
"ORDER BY ABS(JULIANDAY('" + sqliteDateFormatter.format(date) + "') - " +
"JULIANDAY(Date))" +
...
关于android - Android中的SQLite Datediff替代品与排序,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13331905/