大于比较的SQLite也返回相等的值。

2024-04-28 21:16:35 发布

您现在位置:Python中文网/ 问答频道 /正文

我在python中使用SQLite。我有一个有两个字段的数据库(时间戳,reading)。在

时间戳是ISO8601字符串,格式如下“YYYY-MM-DD HH:MM:不锈钢不锈钢". 在

运行此SQL查询时:

SELECT timestamp, value FROM 'readings' WHERE timestamp > datetime('2017-08-30 14:19:28.684314')

我得到了所有合适的读数,其中时间戳是从提供的日期开始的,但我也从我传入的日期时间中获得读数(在示例中:“2017-08-30 14:19:28.684314”)。在

我的问题是为什么大于比较运算符假装它是大于或等于运算符?在


Tags: 字符串数据库sqlite格式hh时间运算符timestamp
2条回答

我解决了问题。我将在这里详细说明,以防对其他人有所帮助。在

是我的疑问。SQLite没有日期或日期时间的直接类型

我以前的疑问是:

SELECT timestamp, value FROM 'readings' WHERE timestamp > datetime('2017-08-30 14:19:28.684314')

隐式地依赖SQL来确定时间戳字段是日期时间。SQLite在内部将它们存储为文本字段。在

当我将查询修改为以下内容时:

^{pr2}$

我开始得到我期望的结果。在

SQLite没有单独的时间戳数据类型。在

datetime()只返回SQLite默认格式的字符串:

> select datetime('2017-08-30 14:19:28.684314');
2017-08-30 14:19:28

这不包括毫秒。因此,比较结果是有毫秒的字符串和没有毫秒的字符串;第一个比较大,因为(在前19个字符相等之后)它有更多的字符。在

对两个值调用datetime()将从两个值中删除毫秒数。 对这两个值调用datetime()并直接比较它们可能是一个更好的主意。在

相关问题 更多 >