sqlite - 无法在 SQLite 中选择日期
问题描述
世界上最简单的查询在 SQLite 中不起作用:
SELECT * FROM "events"
WHERE "date" >= datetime('2021-08-05T22:00:00') AND
"date" < datetime('2021-08-12T22:00:00');
表中的日期如下,我只收到最后 2 个:
2021-08-12T16:00:00
2021-09-10T16:00:00
2021-10-12T16:00:00
2021-11-09T17:00:00
2021-12-09T17:00:00
2021-08-12T16:00:00
2021-09-10T16:00:00
2021-10-12T16:00:00
2021-11-09T17:00:00
2021-12-09T17:00:00
2021-08-12T16:00:00
2021-09-10T16:00:00
2021-10-12T16:00:00
2021-11-09T17:00:00
2021-12-09T17:00:00
2021-08-12T16:00:00
2021-09-10T16:00:00
2021-10-12T16:00:00
2021-11-09T17:00:00
2021-12-09T17:00:00
2021-08-12T16:00:00
2021-09-10T16:00:00
2021-10-12T16:00:00
2021-11-09T17:00:00
2021-12-09T17:00:00
2021-08-12T16:00:00
2021-09-10T16:00:00
2021-10-12T16:00:00
2021-11-09T17:00:00
2021-12-09T17:00:00
2021-08-11T16:00:00
2021-08-12 16:00:00
我通过在 SQLiteStudio v3.2.1 中从记事本粘贴简单文本来插入值
解决方案
如果你执行:
datetime('2021-08-05T22:00:00')
结果是:
2021-08-05 22:00:00
你注意到失踪了'T'
吗?
因此,您正在比较字符串(在 SQLite 中,日期是字符串)并且比较是按字母顺序进行的,但是在不等式的左侧,您有一个带有 a 的字符串,'T'
而在右侧是一个不带 a 的字符串'T'
。
datetime()
在不等式两边使用函数:
WHERE datetime("date") >= datetime('2021-08-05T22:00:00')
AND datetime("date") < datetime('2021-08-12T22:00:00')
或者,根本不使用它:
WHERE "date" >= '2021-08-05T22:00:00'
AND "date" < '2021-08-12T22:00:00'
请参阅演示。
推荐阅读
- android - 使用 Android 密钥库时出现 KeyNotYetValidException
- javascript - 获取基于时间戳获取谷歌图表的问题
- docker - 如果机器上没有安装的 Volumes 文件夹,Docker stack deploy 不会运行容器
- python - 与未知数量的参数相交的 Pythonic 方式
- java - Lombok 1.18.2 不适用于 maven 和 jdk 10
- java - 在查询、jpa 存储库和 Spring Boot 中使用非硬编码值
- android - 我应该选择哪个 Recyclerview 或 ScrollView?
- google-api - Google 管理帐户:API 访问所需的权限
- debugging - 设置短名称时连接到生产节点
- ios - 具有相同 bundleID 的应用程序将具有相同的沙盒?