【发布时间】:2021-09-08 16:00:11
【问题描述】:
我的 SQLite DB 中有下表:
CREATE TABLE [TICK] (
TS DATETIME NOT NULL,
PRICE DECIMAL(10,3) NOT NULL
);
我试图过滤掉给定的日期和时间范围 - 例如:
SELECT * FROM TICK t WHERE ts between '2017-01-25 21:44:13' AND '2017-03-21 16:35:14'
但这会返回 ts=2017-01-26 08:00:00 的第一条记录,而预计会出现“2017-01-25 21:45:12”
我可以通过将 ts 转换为 DateTime 来改进它:
SELECT * FROM TICK t WHERE datetime( ts) between '2017-01-25 21:44:13' AND '2017-03-21 16:35:14'
但我不明白为什么我需要这样做(如果 TS 列已经是 DateTime 类型)?
这种查询的性能也比第一个慢 10 倍
请告知如何处理 Sqlite 中的时间戳...(我在其他数据库引擎中没有此类问题)
示例数据:
TS |PRICE |
--------------------+--------+
2017-01-30 08:00:00|2293.598|
2017-01-30 08:01:00| 2287.14|
2017-01-30 08:02:00|2287.194|
2017-01-30 08:03:00|2287.335|
2017-01-30 08:04:00| 2287.23|
2017-01-30 08:05:00|2287.078|
2017-01-30 08:06:00|2287.156|
2017-01-30 08:07:00|2287.063|
2017-01-30 08:08:00|2286.782|
【问题讨论】:
-
SQLite 中没有 DATETIME 数据类型:sqlite.org/datatype3.html
-
发布您的表的示例数据。
-
@forpas - 为什么我可以在 DDL 中使用它以及为什么在我进行投射时它会起作用
-
您可以使用 anything 作为数据类型。试试
CREATE TABLE t(x anything)。它在 SQLite 中工作。阅读我之前评论链接中的文档。另请阅读:sqlite.org/lang_datefunc.html -
TS 列的日期和时间之间真的有 2 个空格吗?如果是这样,请将其更改为正好 1 个空格。