我有一个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
到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
的数据,我认为我应该使用“小于或等于”。
为什么这不起作用?
答案 0 :(得分:2)
自从我使用SQLite以来已经有一段时间了,但是我在这里的假设是这是扔掉查询的时间部分。
与 just 比较,日期部分(例如'2019-07-15'
)可能与'2019-07-15T00:00:00.000Z'
比较。在这种情况下,所有日期等于'2019-07-05'
的行都被排除在外,因为它们的 time 部分将它们排在当天的晚些时候,因此实际上更大即使日期相等。
您可以调整查询以仅检查它是否小于第二天(< '2019-07-16'
),或者在当前使用的日期(<= '2019-07-15T23:59:59.999Z'
)上添加时间方面。
答案 1 :(得分:2)
SQLite将日期值存储为TEXT。
因此,这种情况:
TimeStamp <= '2019-07-15'
将TimeStamp
与'2019-07-15'
比较为字符串。
您可以使用
TimeStamp <= '2019-07-15T23:59:59.999Z'
因此,您可以获取直至(包括)'2019-07-15'
的所有日期。
或更简单:
TimeStamp < '2019-07-16'