如何在SQLite的日期和时间之间过滤数据

时间:2018-10-21 16:50:25

标签: sqlite

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

现在我想在01/10/2018 04:00:00 PM02/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数据,但我希望01/10/2018 04:00:00 PM02/10/2018 04:00:00 AM之间的数据

从今天4PM到次日4AM,有什么方法可以获取数据吗?

1 个答案:

答案 0 :(得分:1)

首先,sqlite 没有实际的日期/时间类型。这是一个只有几种类型的简单数据库。您的smalldatetime列实际上具有NUMERIC相似性(请参见the affinity rules)。

为使Sqlite的内置函数能够理解它们,日期和时间可以为stored as numbers or text;数字是自Unix时代以来的秒数或儒略日。文本字符串可以是多种格式之一。请参阅the docmentation中的列表。所有这些都具有额外的优势,当与相同格式的其他时间戳相比时,它们可以被正确地排序。

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

如果将时间戳格式更改为更好的格式(例如,假设10月1日)'2018-10-01 16:00:00',则可以对范围进行排序和比较,并将其与sqlite函数一起使用。