android - Android中的SQLite Datediff替代品与排序

标签 android sqlite date iso

我是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/

相关文章:

android - 对 Activity 的 onCreate() 的长时间操作

android - 在 ConcatAdapter Android 中设置不同适配器之间的边距/填充

sqlite - 如何在 Electron 应用程序中加密 SQLite DB?

javascript - phonegap Sqlite插件实现-错误和警告:no such table

windows - 如何在批处理文件中获取昨天的日期

android - 是否有适用于 Android 的电子表格小部件?

android - 调试主屏幕小部件时,调试器在 Android Studio 中断开连接

android - 如何在 nativescript/angular android 中导入/导出 sqlite 数据库?

PHP/MySQL : Date lower than today

MYSQL用户统计查询求助?