我有一个表,其中有很多列,其中一列用于将日期值保存在“ 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:
来获取正确的值。这些将被正确排序。