iphone - SQLite3-选择日期范围不起作用

标签 iphone objective-c sqlite

另一个让我悲伤的人。

在SQLite3 DB Select中,我查询(NSDate *)fromDate到(NSDate *)toDate中指定的日期范围

const char *sql = "SELECT * FROM A, B WHERE A.key = B.key AND A.date between ? and ?";


打开数据库后,我在Objective-C中运行查询,如下所示:

NSDateFormatter *tmpDatFmt = [[[NSDateFormatter alloc] init] autorelease];
[tmpDatFmt setDateFormat:@"dd-MM-yyyy"];

sqlite3_stmt *stmt;

if(sqlite3_prepare_v2(db, sql, -1, &stmt, NULL) == SQLITE_OK) {
    NSLog(@"From %s to %s;", [[tmpDatFmt stringFromDate:fromDate] UTF8String], [[tmpDatFmt stringFromDate:toDate] UTF8String]);

    sqlite3_bind_text(stmt, 1, [[tmpDatFmt stringFromDate:fromDate] UTF8String], -1, SQLITE_STATIC);  // first '?'
    sqlite3_bind_text(stmt, 2, [[tmpDatFmt stringFromDate:toDate]   UTF8String], -1, SQLITE_STATIC);  // second '?'

    while(sqlite3_step(stmt) == SQLITE_ROW) {
        NSLog(@"Success");}


在数据库中,我有一些与日期范围匹配的记录:

12-04-2010 = in seconds 1271059200
13-04-2010 = in seconds 1271145600
13-04-2010 = in seconds 1271152800
14-04-2010 = in seconds 1271267100


当我运行它时,第一个NSLog显示

From 2010-04-01 to 2010-04-30


我的问题是未选择记录(日志中未显示“成功”),我也不明白为什么。

早些时候,我误算了两天后的日期,因为

14-04-2010 = in seconds 1271232000
15-04-2010 = in seconds 1271318400
15-04-2010 = in seconds 1271325600
16-04-2010 = in seconds 1271439936


这些日期效果很好(4 x“成功记录”。我很困惑...

最佳答案

SQLite没有日期类型(尽管它具有良好的日期功能)。您的比较是在字符串上完成的,要使其正常工作,您应该将格式更改为yyyyMMdd或yyyy-MM-dd,以便它们按日期顺序排序。

关于iphone - SQLite3-选择日期范围不起作用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2691886/

相关文章:

ios - CGRectIntersectsRect 用于多个 CGRect

SQLite 将默认时间戳存储为 unixepoch

iphone - iOS 中 SQLite 中的巨大静态数据 - iPhone

objective-c - 提示 : How to avoid opening "Issue Navigator" in Xcode4

iphone - Core Data 托管对象的生命周期

sql - sqlite中的select查询不返回任何内容

iphone - 从 iphone 的核心数据中删除对象时应用程序崩溃

iphone - 哪个移动系统适合程序员?

ios - 执行选择器可能会因为select未知而导致泄漏?

iphone - Facebook URL 用户配置文件方案