我正在尝试使用FMDB在sqlite中的表上执行日期比较查询,但不知何故它没有返回任何数据。尝试了不同的东西,但没有一个有效。
以下是我的表创建代码
NSString *sql = [[NSString alloc] initWithFormat:@"CREATE VIRTUAL TABLE IF NOT EXISTS %@ USING fts4(%@, %@, %@, %@);",
myTable,
column1,
column2,
column3,
dateColumn];
BOOL success = [db executeUpdate:sql];
这是我将数据插入其中的方式
[db setDateFormat:[FMDatabase storeableDateFormat:@"yyyy-MM-dd HH:mm:ss"]];
NSString *sql2 = [NSString stringWithFormat:@"INSERT INTO %@ (%@, %@, %@, %@, %@, %@, %@, %@) VALUES (?, ?, ?, ?);",
myTable,
column1,
column2,
column3,
dateColumn];
BOOL insertSucceeded = [db executeUpdate:sql2, someObject.value1, someObject.value2, someObject.value3, someObject.date];
最后是获取查询
NSString *date = [[FMDatabase storeableDateFormat:@"yyyy-MM-dd HH:mm:ss"] stringFromDate:[NSDate date]];
NSMutableString *dateMatchQuery = [NSMutableString stringWithFormat:@"%@ < %@", dateColumn, date];
NSString *sql = [NSString stringWithFormat:@"SELECT *, snippet(%1$@, '%2$@', '%3$@', '...') AS %4$@ \
FROM %1$@ \
JOIN ( \
SELECT docid, rank(matchinfo(%1$@), %5$@) AS rank \
FROM %1$@ \
WHERE %1$@ MATCH ? \
ORDER BY rank DESC \
) AS ranktable USING(docid) \
WHERE %1$@ MATCH ? \
ORDER BY ranktable.rank DESC, %6$@ DESC LIMIT %7$lu OFFSET 0",
myTable,
snippitStartTag,
snippitEndTag,
columnSnippit,
columnRankValues,
columnFiled,
(unsigned long)kDefaultSearchHitsLimit];
FMResultSet *resultSet = [db executeQuery:sql, dateMatchQuery, dateMatchQuery];
非常感谢任何帮助。