SQLite Datetime 查询前 24 小时
SQLite Datetime before 24 hours query
我有一个数据库 table 并存储一个带有 UTC 日期时间的日期时间列,iOS [NSDate date] 总是返回一个 UTC 日期时间。一切都很好。
我正在使用 FMDB 通过以下代码获取最近 12 小时和 24 小时的数据。
[self.fmQueue inDatabase:^(FMDatabase *db)
{
NSString* queryCommand = [NSString stringWithFormat:@"SELECT * FROM %@ WHERE %@ >= Datetime('?')", readingsTable, dateTimeRecordedColumn];
NSDate* dateBefore24Hours = [self.dateUtilities dateBySubtractingDays:1 forDate:[NSDate date]];
WEELogDebug(@"Date before 24 hours: %@", dateBefore24Hours);
FMResultSet* result = [db executeQuery:queryCommand, dateBefore24Hours];
if (completionblock)
{
completionblock([self readingsArrayFromResultSet:result]);
}
}];
我需要完成的是检索日期在 dateBefore24Hours
变量之后的所有数据。调试消息显示正确的值,例如 [NSDate date] now before 24 hours is Date before 24 hours: 2015-04-06 15:28:08 +0000
,所以我应该通过上述查询获取 2015-04-07 15:28:08 +0000
之前的所有记录,但我没有。
我使用 SQLite Studio 为您提供我目前在数据库中的记录。
您不需要 Datetime()
函数。 (即使你这样做了,也永远不会将 ?
放在引号内。)
当 FMDB 在参数列表中遇到 NSDate
对象时,它会自动执行 timeZoneForSecondsFromGMT
(如果您没有指定 dateFormat
字符串),所以这个数字与您的 dateTimeRecorded
列进行比较时,可以使用日期的表示形式。顺便说一下,这个数值可以在 SQLite 中作为 unixepoch
值访问。
最重要的是,您应该能够使用 ?
:
SELECT * FROM %@ WHERE %@ >= ?
我有一个数据库 table 并存储一个带有 UTC 日期时间的日期时间列,iOS [NSDate date] 总是返回一个 UTC 日期时间。一切都很好。
我正在使用 FMDB 通过以下代码获取最近 12 小时和 24 小时的数据。
[self.fmQueue inDatabase:^(FMDatabase *db)
{
NSString* queryCommand = [NSString stringWithFormat:@"SELECT * FROM %@ WHERE %@ >= Datetime('?')", readingsTable, dateTimeRecordedColumn];
NSDate* dateBefore24Hours = [self.dateUtilities dateBySubtractingDays:1 forDate:[NSDate date]];
WEELogDebug(@"Date before 24 hours: %@", dateBefore24Hours);
FMResultSet* result = [db executeQuery:queryCommand, dateBefore24Hours];
if (completionblock)
{
completionblock([self readingsArrayFromResultSet:result]);
}
}];
我需要完成的是检索日期在 dateBefore24Hours
变量之后的所有数据。调试消息显示正确的值,例如 [NSDate date] now before 24 hours is Date before 24 hours: 2015-04-06 15:28:08 +0000
,所以我应该通过上述查询获取 2015-04-07 15:28:08 +0000
之前的所有记录,但我没有。
我使用 SQLite Studio 为您提供我目前在数据库中的记录。
您不需要 Datetime()
函数。 (即使你这样做了,也永远不会将 ?
放在引号内。)
当 FMDB 在参数列表中遇到 NSDate
对象时,它会自动执行 timeZoneForSecondsFromGMT
(如果您没有指定 dateFormat
字符串),所以这个数字与您的 dateTimeRecorded
列进行比较时,可以使用日期的表示形式。顺便说一下,这个数值可以在 SQLite 中作为 unixepoch
值访问。
最重要的是,您应该能够使用 ?
:
SELECT * FROM %@ WHERE %@ >= ?