目标 C,SQLite SELECT BETWEEN 问题

Posted

技术标签:

【中文标题】目标 C,SQLite SELECT BETWEEN 问题【英文标题】:Objective C, SQLite SELECT BETWEEN Issue 【发布时间】:2011-05-03 19:51:07 【问题描述】:

我正在尝试根据滚动条选择的 UNIX 时间戳从 SQLite 数据库中提取记录。每个记录都有一个时间戳和持续时间,因此当所选时间戳之后在开始时间之后以及开始时间加上持续时间,所以要选择它。

我编写了一个查询,我认为它不仅应该可以工作,而且可以在我拥有但不使用 XCode 附带的 SQLite 的 SQLite 客户端中工作。

SELECT * FROM `booking` WHERE '1304168400' BETWEEN `stamp` AND (`stamp`+(`duration`*60))

这是我的查询。时间戳是选定的时间戳,戳字段是记录时间戳,持续时间是预订的长度(以分钟为单位)。

我可以看到使用我拥有的客户端进行此操作的唯一原因是 SQLite 的版本不同,并且 BETWEEN 命令不受支持或以相同的方式受支持。

任何建议或帮助将不胜感激。 谢谢!

【问题讨论】:

【参考方案1】:

这就是 SQLite 查询进入 SQLite 时的样子。 (文字时间戳周围没有引号,没有反引号。)如果您可以使用 SQLite 打开数据库并运行此查询,则此语法应该可以工作。

sqlite> SELECT *
        FROM booking
        WHERE 1304168400 BETWEEN stamp and (stamp + (duration * 60));

用双引号保护标识符,而不是反引号。

sqlite> SELECT *
        FROM "booking"
        WHERE 1304168400 BETWEEN "stamp" and ("stamp" + ("duration" * 60));

您可以通过此查询确定正在运行的 SQLite 版本。

sqlite> select sqlite_version();

【讨论】:

现在这么简单的事情我觉得很傻。拥有丰富的 mysql 经验,这只是我编写查询的一般方式,并假设 SQLite 具有相同的语法(如果不相似的话)。非常感谢,你帮了大忙。 标准 SQL 使用双引号作为标识符。在这种情况下,MySQL 是奇怪的,而不是 SQLite。

以上是关于目标 C,SQLite SELECT BETWEEN 问题的主要内容,如果未能解决你的问题,请参考以下文章

如何将 SQLite 文件从 Documents 目录保存回目标 C 中的主包?

SQLite 中嵌套内连接的问题

在 Swift 中复制 Sqlite 数据库无法正常工作

vs2005和sqlite怎么连接

rudonSqlite{} - SQLite3简易操作类 - SQLite增删改查 - PHP工具

rudonSqlite{} - SQLite3简易操作类 - SQLite增删改查 - PHP工具