sqlite - 为什么我的 SQLite 查询使用“小于或等于”不返回“等于”部分,而只返回“小于”部分?
问题描述
我有一个 SQLite 数据库,其中包含以下数据:
select Id,TimeStamp from MyTable;
ID TimeStamp
1 2019-07-15T18:18:44.829Z
2 2019-07-15T18:18:53.251Z
3 2019-07-15T18:18:59.475Z
4 2019-07-15T18:19:15.139Z
5 2019-07-15T18:20:10.499Z
6 2019-07-15T18:20:28.91Z
7 2019-07-15T20:41:32.069Z
8 2019-07-15T20:41:42.344Z
9 2019-07-15T20:42:09.124Z
10 2019-07-15T20:42:26.806Z
11 2019-07-16T15:06:27.394Z
12 2019-07-16T15:06:39.871Z
13 2019-07-16T15:06:49.397Z
14 2019-07-16T15:06:56.887Z
15 2019-07-16T15:07:04.288Z
16 2019-07-16T15:07:34.156Z
17 2019-07-16T15:07:56.606Z
18 2019-07-16T15:08:23.908Z
19 2019-07-16T15:08:51.135Z
20 2019-07-16T15:09:29.955Z
21 2019-07-16T15:09:57.523Z
22 2019-07-16T15:10:17.277Z
23 2019-07-16T15:10:43.056Z
24 2019-07-16T15:10:53.924Z
25 2019-07-16T15:11:49.575Z
26 2019-07-16T15:12:39.563Z
27 2019-02-01T15:07:04.288Z
28 2019-02-02T15:07:04.288Z
29 2019-02-03T15:07:04.288Z
30 2019-02-04T15:07:04.288Z
31 2019-02-05T15:07:04.288Z
32 2019-03-06T15:07:04.288Z
33 2019-03-07T15:07:04.288Z
34 2019-03-08T15:07:04.288Z
35 2019-03-09T15:07:04.288Z
36 2019-03-10T15:07:04.288Z
37 2019-04-11T15:07:04.288Z
38 2019-04-12T15:07:04.288Z
39 2019-04-13T15:07:04.288Z
40 2019-04-14T15:07:04.288Z
41 2019-04-15T15:07:04.288Z
42 2019-05-16T15:07:04.288Z
43 2019-05-17T15:07:04.288Z
44 2019-05-18T15:07:04.288Z
45 2019-05-19T15:07:04.288Z
46 2019-05-20T15:07:04.288Z
如您所见,插入数据库的第一个日期(ID 1-26))在2019-07-15
to期间2019-07-16
。较晚的日期 (ID 27-46) 在 至 期间2019-02-01
内2019-05-20
。
但是,当我运行其中包含“小于或等于”的查询时,它只返回小于数据:
SELECT ID,TimeStamp FROM MyTable WHERE TimeStamp >= '2019-02-03' AND TimeStamp <= '2019-07-15' order by TimeStamp;
SELECT ID,TimeStamp FROM MyTable WHERE TimeStamp >= date('2019-02-03') AND TimeStamp <= date('2019-07-15') order by TimeStamp;
SELECT ID,TimeStamp FROM MyTable WHERE TimeStamp BETWEEN '2019-02-03' AND '2019-07-15' order by TimeStamp;
SELECT ID,TimeStamp FROM MyTable WHERE TimeStamp BETWEEN date('2019-02-03') AND date('2019-07-15') order by TimeStamp;
29 2019-02-03T15:07:04.288Z
30 2019-02-04T15:07:04.288Z
31 2019-02-05T15:07:04.288Z
32 2019-03-06T15:07:04.288Z
33 2019-03-07T15:07:04.288Z
34 2019-03-08T15:07:04.288Z
35 2019-03-09T15:07:04.288Z
36 2019-03-10T15:07:04.288Z
37 2019-04-11T15:07:04.288Z
38 2019-04-12T15:07:04.288Z
39 2019-04-13T15:07:04.288Z
40 2019-04-14T15:07:04.288Z
41 2019-04-15T15:07:04.288Z
42 2019-05-16T15:07:04.288Z
43 2019-05-17T15:07:04.288Z
44 2019-05-18T15:07:04.288Z
45 2019-05-19T15:07:04.288Z
46 2019-05-20T15:07:04.288Z
无论我运行哪个查询,我都不会得到等于 的数据2019-07-15
,我认为我应该使用“小于或等于”。
为什么这不起作用?
解决方案
自从我使用 SQLite 以来已经有一段时间了,但我在这里的假设是,这是让您的查询中断的时间部分。
仅与日期部分(例如'2019-07-15'
)进行比较可能是与'2019-07-15T00:00:00.000Z'
. 在这种情况下,日期等于的所有行都'2019-07-05'
被排除在外,因为它们的时间部分将它们放在当天晚些时候,因此实际上大于即使日期相等。
您可以调整查询以检查它是否小于第二天 ( < '2019-07-16'
),或者在您当前使用的日期 ( ) 上添加时间方面<= '2019-07-15T23:59:59.999Z'
。
推荐阅读
- swift - 我尝试使用 sourcekit-lsp 设置快速编辑 vim,但 vim-lsp 一直说未安装 sourcekit-lsp
- scala - 如何使用 Circe 删除对象列表中的空值
- centos7 - RPM 构建错误:宏扩展中的递归级别太多。这可能是由递归宏声明引起的
- c# - 优化多重比较条件
- r - 未捕获的类型错误:运行 Shiny 应用程序时无法读取未定义的属性“替换”
- reactjs - React 中带有 useEffect 的异步上下文
- r - 在 R 中查看最佳 dtw 对齐
- python - 如何将输入转换为小写
- reporting-services - 在分组和行号方面需要帮助
- excel - 将文件保存到新驱动器后使用 Shell 运行批处理文件