sqlite - 如何在sqlite中过滤日期和时间之间的数据
问题描述
我有一个Order_Date
数据类型为的表 Orders,smalldatetime
我的 Order_Date 格式为01/10/2018 10:00:00 PM
现在我想过滤01/10/2018 04:00:00 PM
AND之间的数据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 PM
和02/10/2018 04:00:00 AM
有没有办法从今天4PM
到第二天获取数据4AM
?
解决方案
首先,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 函数一起使用。
推荐阅读
- apache-spark - Spark SQL(PySpark) - SparkSession 导入错误
- c# - C#逐渐生成唯一的安全随机字符串
- c# - 实体框架急切地加载层次结构
- visual-studio-code - 使用 vscode 调试器时无法找到一些 node_modules 路径
- typescript - Foreach array to display the value in TypeScript
- javascript - Javascript中的倒数计时器
- ag-grid - 跨浏览器的 ag-grid 右键单击支持
- django - Django filter/exclude against list of objects
- sql-server - ConnectionError: Failed to connect to
- connect EACCES - ios - 关闭并重新打开应用程序时如何“保存”导航堆栈上的当前视图和所有以前的视图?