2012-11-11 47 views
2

我是Sqlite的初学者,并努力为我所需要的查询进行拼合。 :-( 任何人都可以帮我吗?Sqlite datediff替代Android中的订购

我有一个给定的日期,在这个变量下面我的例子中被称为“givenDate”,是Java类型的格式为YYYY-MM 日期,因此-dd

我也有一个数据库表叫“主”“ID”“日期”柱,日期列条目是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. 

我需要从表“主”比较时日期列的10个最近的日期列表与我的给定日期“givenDate”。

所以我需要:

  1. 通过最小的日期列每个日期进行比较,以我定的日期“givenDate”
  2. 制定出它们之间的绝对差值
  3. 责令其最大的区别
  4. 返回的ID和日期为每个最小10个结果的

所以,如果givenDate是1948年9月13日吨母鸡的结果将是:由于该数据库SQLite数据库

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中使用。

我试图做这样的事情:

String query = 
"SELECT ID, Date" + 
"FROM main" + 
"WHERE Date IS NOT NULL" + 
"ORDER BY ABS(date("+givenDate+") - Date) ASC" + 
"LIMIT 10"; 

这似乎并没有工作。我只是在给定日期和升序中获得与年份相同的日期列表。日期差异似乎没有实际计算日期的差异,并给出最近的10个。

我查看了很多帖子,但找不到任何具体的东西来做我需要的东西。

任何帮助将不胜感激。

感谢, Simmy :-)


答案是:

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"; 
+0

SQLite没有变量。你如何将'givenDate'的值传递给查询? –

+0

我已更新我的原始邮件以显示givenDate在Android中的传递方式。 我已将givenDate更改为“+ givenDate +” – Simmy

回答

0

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))" + 
    ... 
+0

感谢您的支持。我在我的代码中尝试过,但是当我尝试运行它时,出现以下错误: 11-13 19:11:48.616:E/AndroidRuntime(13804):android.database.sqlite.SQLiteException:near“Date”:语法错误(代码1):,编译时:SELECT ID,DateFROM mainWHERE日期IS NOT NULLORDER BY ABS(JULIANDAY('1995-10-23 00:00:00') - JULIANDAY(Date))极限10 任何想法? 谢谢, Simmy – Simmy

+0

插入串联字符串的空间。谢谢, –

+0

谢谢,现在这个作品! :-D 为了大家的利益,这是我使用的实际代码: 'Format sqliteDateFormatter = new SimpleDateFormat(“yyyy-MM-dd HH:mm:ss.SSS”); 字符串QUERY2 = \t “SELECT _id,日期” + \t “FROM主” + \t “WHERE日期IS NOT NULL” + \t “ORDER BY ABS(儒略日('” + sqliteDateFormatter.format(ADATE)+“ ') - “+ ”JULIANDAY(Date))“+ \t”LIMIT 10“; ' – Simmy