我有一个表,订单Order_Date
的数据类型为smalldatetime
,我的Order_Date格式为01/10/2018 10:00:00 PM
现在我想在01/10/2018 04:00:00 PM
和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
数据,但我希望01/10/2018 04:00:00 PM
和02/10/2018 04:00:00 AM
之间的数据
从今天4PM
到次日4AM
,有什么方法可以获取数据吗?
答案 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函数一起使用。