按日期列排序的Sqlite

4

我正在使用 ISO8601 格式(例如:2015-04-15T10:54:14Z)将日期存储在 SQLite 表中。我希望获取表中最年轻的日期。以下是我的 SQLite 表中的日期。

2015-04-15T10:54:14Z 
2015-04-15T10:54:115Z
2015-04-15T10:54:216Z
2015-04-15T10:54:320Z
2015-04-15T10:54:422Z

我正在尝试以下查询:

SELECT * FROM Table1 ORDER BY datetime("date_column") DESC ;

但我没有得到合适的结果。

涉及IT技术。

您的查询是正确的,您确实需要datetime函数,因为ISO8601字符串不按字典顺序排列。它们可以包括变量数量的字符,用于表示秒的分数以及时区。但是,您的日期字符串并非ISO8601格式。10:43:115不是有效的时间(115秒?)。对于秒的分数,您需要使用点号,例如:10:43:11.5。我知道这很老,但它可能会帮助那些遇到此类问题的人。 - Toxiro
3个回答

11

将ISO 8601日期时间戳归一化为UTC,具有字母(词典)顺序也是时间顺序的好特性。

您不需要datetime(),只需ORDER BY date_column DESC即可将其按最新排序,并且可以添加LIMIT 1来获取最新的一个。


不知道为什么这个被踩了。这是真正有用的信息。而且它像魔法一样运行,因为我刚刚实现了它。没有使用Compartors进行嘲笑。谢谢@IaaIto - EdGs
1
"ISO 8601日期时间戳具有良好的特性,即字母(词典)顺序也是时间顺序。"仅当日期和时间以UTC形式给出且末尾没有时区偏移量时才适用。 - balu
@balu 是的,你说得对,谢谢。我澄清了答案。 - laalto

1

将您的查询更新为以下内容:

SELECT * FROM Table1 ORDER BY date_column DESC LIMIT 1

@user3271351,您能将此标记为官方答案吗? - Bernardmoes

0

使用此方法将日期列放入您的数据库中:

public String getDatetime(){
    //get time and date
    Calendar c=Calendar.getInstance();
    CharSequence s  = DateFormat.format("yyyy-MM-dd HH:mm:ss", c.getTime());

    //convert it to string array

    return s.toString();
}

然后像之前一样使用您的查询,因为datetime()接受特定格式。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接