【问题标题】:FMDB and datetime() functionFMDB 和 datetime() 函数
【发布时间】:2012-05-01 06:49:48
【问题描述】:

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

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

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

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

【问题讨论】:

    标签: ios sqlite datetime fmdb


    【解决方案1】:

    您确定通过以下方式正确读取结果集: While ([rs next]) {

    【讨论】:

      【解决方案2】:

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

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

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

      3. 您可能需要重新评估localtime 的使用。

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

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2013-08-21
        • 2011-05-13
        • 1970-01-01
        • 1970-01-01
        • 2013-11-15
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多