gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-12-03 18:17:55 31 4
gpt4 key购买 nike

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

31 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com