ORDER BY timestring作为时间而不是字符串

时间:2013-06-02 03:15:59

标签: sqlite android-sqlite

我有一个表格,其中包含一些时间段,例如

| time|
|=====|
| 9:20|
|14:33|
| 7:35|

在我的查询中,我有ORDER BY time,但它将时间排序为字符串,因此结果按

排序
|14:33|
| 7:35|
| 9:20|

我需要对ORDER BY语句做什么才能将结果按时间排序,以便导致

| 7:35|
| 9:20|
|14:33|

2 个答案:

答案 0 :(得分:2)

最好的方法是将时间存储为秒。可以是unix时间戳(推荐),也可以是午夜以来的秒数。

在第二种情况下,7:35将是7 * 3600 + 35 * 60 = 27300,14:33的表示将是52380将它们存储为整数(时间戳)。类似地,对于unix时间戳,自1970年以来,时间被存储为无秒数。

您现在可以将它们整理为整数

使用实用程序方法轻松处理转换

答案 1 :(得分:2)

一种解决方案是在查询本身填充不包含前导0的小时,然后执行排序。

SELECT * FROM <table> ORDER BY SUBSTR('0' || time, -5, 5);

以下是SUBSTR方法正在进行的细分。

||是SQLite中的字符串连接操作。因此'0' || '7:35'会给'07:35''0' || '14:23'会给'014:23'。由于我们只对HH:MM之类的字符串感兴趣,因此我们只需要此连接字符串中的最后5个字符。

如果您使用前导0存储原始字符串数小时和分钟,那么您只需按时间列排序并获得所需结果。

|14:33|
|07:35|
|09:20|

这样也可以很容易地将时间列用作实际时间单位,并且可以轻松地对其进行计算。例如,如果您想要总共添加20分钟,可以通过以下方式实现:

SELECT TIME(time, '+20 minutes') FROM <table>;

这个0填充的原因是因为SQLite现在只能理解24小时,例如'HH:MM'但不是'H:MM'

这是关于Date and Time related functions的SQLite文档的一个很好的参考页面。