目标 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 中的主包?