我有一个表,其中有很多列,其中一列用于将日期值保存在“ 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”。如果将按desc时间戳排序的订单应用于此值,则返回

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.

最佳答案

您的字符串格式将日期放在第一位,因此将按照日期第一(按字母顺序)进行排序。您应该将存储日期的方式更改为按时间值自然排序的日期。

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

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

09-30 18:27
查看更多