0

我在日期和 FMDB 方面遇到了一些问题。我有一大堆包含日期时间值的记录,我想按日期/小时等进行分组。使用基本的 sqllite 查询工具,我确定了要使用的正确 sql 语法:

select strftime('%Y-%m-%d',datetime('2001-01-01',zentrydate || 'seconds','localtime')) as dteEntry...

以上工作,返回的数据是正确的。但是,当我尝试使用 FMDB 包装器执行相同操作时,我的结果不会返回正确的结果。当我将它打印到控制台时,使用 datetime() 函数返回的任何字段都读取为 NULL。此外,查询也没有正确执行,因为只返回了 1 条记录,我知道这是不正确的,因为我可以使用返回正确结果的 sqllite 工具执行相同的查询。

谁能帮我弄清楚我需要做什么?我几周前才下载了 FMDB 库,所以应该有一个相对较新的版本。

4

2 回答 2

0

我知道这是一个老问题,但我只是偶然发现了它。几个想法:

  1. 当您说您有一堆日期时间记录时,我不确定这在 SQLite 的上下文中意味着什么,因为没有本机日期时间数据类型。(对于我们这些从其他 SQL 引擎接近 SQLite 的人来说,这是一个陌生的概念。)它要么存储为字符串,要么存储为数值。(请参阅SQLite 数据类型。)

  2. 我是否从您的zentrydate || 'seconds'" 语法中推断出 zentrydate 是自 2001 年 1 月 1 日以来的秒数?如果是这种情况,那么您在秒数之前缺少一个空格,例如zentrydate || ' seconds'。如果它不是自 1/1/ 以来的秒数2001,那么我不知道该怎么做。无论如何,这肯定会导致FMDB返回NULL值。

  3. 您可能需要重新评估localtime.

底线,我怀疑这不是FMDB 问题,而是更广泛的 SQLite 问题。如果您仍有问题,请告诉我们。不过,我相信您现在已经找到了解决问题的其他方法。

于 2012-04-30T22:49:48.060 回答
0

你确定你正确地阅读了结果集: While ([rs next]) {

于 2011-12-12T22:35:37.870 回答