首页 > 解决方案 > 如何在sqlite中过滤日期和时间之间的数据

问题描述

我有一个Order_Date数据类型为的表 Orders,smalldatetime我的 Order_Date 格式为01/10/2018 10:00:00 PM

现在我想过滤01/10/2018 04:00:00 PMAND之间的数据02/10/2018 04:00:00 AM

我试过的

SELECT distinct(Order_No),Order_Date from Orders WHERE Order_Date BETWEEN '01/10/2018 04:00:00 PM' and '02/10/2018 04:00:00 AM'

此查询仅显示01/10/2018数据,但我想要数据 BETWEEN01/10/2018 04:00:00 PM02/10/2018 04:00:00 AM

有没有办法从今天4PM到第二天获取数据4AM

标签: sqlite

解决方案


首先,sqlite没有实际的日期/时间类型。这是一个只有几种类型的简单数据库。您的smalldatetime列实际上具有NUMERIC关联性(请参阅关联性规则)。

为了让 Sqlite 的内置函数能够理解它们,日期和时间可以存储为数字或文本;numbers 要么是自 Unix 纪元以来的秒数,要么是儒略日。文本字符串可以是多种格式之一;请参阅文档中的列表。所有这些都具有额外的优势,即与相同格式的其他时间戳相比,它们可以正确排序。

您似乎正在使用文本字符串,例如'01/10/2018 04:00:00 PM'. 这不是 sqlite 日期和时间函数可以理解的格式之一,并且它不会自然排序,因此除了测试相等性之外,您不能在比较中使用它。再加上它是模棱两可的:是 10 月 1 日还是 1 月 10 日?根据你来自哪里,你会对它有不同的解释。

如果您将时间戳格式更改为更好的格式,例如 (Assuming October 1) '2018-10-01 16:00:00',您将能够对范围进行排序和比较,并将其与 sqlite 函数一起使用。


推荐阅读