我在 python 本地应用程序中使用 sqlite3。
我遇到了有史以来最奇怪的错误之一,我有一个名为
date_bought
的列,日期值从 28/08/2023 到 30/08/2023。
执行此 SQL 查询将检索所需的数据:
select *
from sold
where date_added between '29/08/2023' and '31/08/2023'
并返回此结果:
123123|souris|70.0|150.0|150.0|3|450|450|29/08/2023 14:48:53|29/08/2023 14:57:16
123123|souris|70.0|150.0|150.0|2|300|300|29/08/2023 14:48:53|29/08/2023 14:57:36
123123|souris|100.0|150.0|150.0|3|450|450|29/08/2023 14:56:20|29/08/2023 14:57:43
现在的问题是,如果我执行:
select *
from sold
where date_added between '29/08/2023' and '01/09/2023'
没有结果,因此更改为 31/09/2023,09 的任何一天都给出与 08 相同的结果,感觉它只比较日期而不是月份和年份,我不明白为什么发生这种事?
谢谢您的宝贵时间。祝你有美好的一天。
SQLite 没有真正的日期列。它存储字符串。如果要以字符串形式存储日期和时间,请使用以下格式:YYYY-MM-DD HH:MM:SS.SSS。在这里,DBMS 将其视为字符串还是日期时间并不重要,因为“2023-08-29”位于“2023-09-01”之前,因为 9 大于 8。
如果您以 dd/mm/yyyy 格式存储日期,则会得到两个字符串“29/08/2023”和“01/09/2023”,并且“01/09/2023”位于“29/08”之前/2023',因为第一个字符'0'已经小于'2'。
所以,我猜你的问题是你以一种不幸的格式存储了日期。您必须使用子字符串来比较两个条目。或者更好的是,您更新所有列以具有适当的日期格式 yyyy-mm-dd。