【问题标题】:SQLite Datetime before 24 hours querySQLite Datetime 前 24 小时查询
【发布时间】:2015-04-07 15:31:40
【问题描述】:

我有一个数据库表并使用 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 是 Date before 24 hours: 2015-04-06 15:28:08 +0000,所以我应该使用上述查询获取直到 2015-04-07 15:28:08 +0000 的所有记录,但我没有。

通过 SQLite Studio,我可以为您提供我目前在数据库中的记录。

【问题讨论】:

    标签: ios objective-c sqlite datetime fmdb


    【解决方案1】:

    您不需要Datetime() 函数。 (即使您这样做了,也永远不会将 ? 放在引号内。)

    当 FMDB 在参数列表中遇到NSDate 对象时,它会自动执行timeZoneForSecondsFromGMT(如果你没有指定dateFormat 字符串),所以这个日期的数字表示可以用于与您的 dateTimeRecorded 列相比。顺便说一句,这个数值可以在 SQLite 中作为unixepoch 值访问。

    底线,你应该可以使用?

    SELECT * FROM %@ WHERE %@ >= ?
    

    【讨论】:

    • 是的,它可以工作,这是复制粘贴的结果,但没有记住我不使用字符串日期时间表示,我需要 SQLite 的 DATETIME() 函数。谢谢它有效。
    猜你喜欢
    • 2018-06-24
    • 1970-01-01
    • 1970-01-01
    • 2022-08-09
    • 1970-01-01
    • 2015-05-09
    • 1970-01-01
    • 1970-01-01
    • 2023-04-10
    相关资源
    最近更新 更多