如何在iOS中以字符串格式保存的日期列中使用order by子句?

时间:2014-05-24 19:11:19

标签: ios sqlite date datetime

我有一张表,其中有许多列和一列用于保存日期值,并且dd mm yyyy HH:MM:SS'但我正在使用TEXT数据类型

创建此列
  "create table if not exists TABLENAME (ID INTEGER, NAME TEXT,TIMESTAMP TEXT,AMOUNT)";

此处TIMESTAMP是我要保存日期值的列。然后我在TIMESTAMP

中插入了值
- (void)insert {
  NSString* dbPath = [DBManager getdbpath];
  if (sqlite3_open([dbPath UTF8String], &database) == SQLITE_OK) {
    NSString* insertSQL =
        [NSString stringWithFormat:@"insert into TABLENAME (ID,NAME, TIMESTAMP , AMOUNT values('%@','%@','%@','%@')",id,Name,TimeStamp, amount];
    const char* insertStatement = [insertSQL UTF8String];
    if (sqlite3_prepare_v2(database, insertStatement, -1, &statement, NULL) ==
        SQLITE_OK) {
      if (sqlite3_step(statement) == SQLITE_DONE) {
        NSLog(@"Done inserting");

      } else {
        NSLog(@"%s", sqlite3_errmsg(database));
        NSLog(@"Error while inserting data into database");
      }
    }
    //        sqlite3_reset(statement);
    sqlite3_finalize(statement);
  }
  sqlite3_close(database);
}

因此,当我尝试从TABLENAME提取时,将命令通过DESC 子句应用到TIMESTAMP列时,不会按正确的顺序提取值。

例如,如果有两个日期值' 02 05 2014 13:02:30' ' 15 04 2014 14:10:15&# 39; 即可。如果通过desc timestamp的订单应用于此返回值

1>15 04 2014 14:10:15
2>02 05 2014 13:02:30

而不是

1>02 05 2014 13:02:30
2>15 04 2014 14:10:15.

1 个答案:

答案 0 :(得分:1)

您的字符串格式将日期放在第一位,因此它将按字母顺序排序(按字母顺序排列)。你应该改变你将日期存储到按时间值自然排序的东西的方式。

正如您在SQLite data types page上看到的,正常机制是将其存储为ISO8601字符串,实数或整数。

我会建议一个整数;您可以使用NSDate的timeIntervalSince1970:来获取正确的值。然后将正确排序这些。