首页 > 解决方案 > 无法在 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 中从记事本粘贴简单文本来插入值

标签: sqlitesqlitestudio

解决方案


如果你执行:

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'

请参阅演示


推荐阅读