SQL where Between 仅比较天数而不是完整日期

问题描述 投票:0回答:1

我在 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 相同的结果,感觉它只比较日期而不是月份和年份,我不明白为什么发生这种事?

谢谢您的宝贵时间。祝你有美好的一天。

sql database sqlite python-sql
1个回答
0
投票

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。

© www.soinside.com 2019 - 2024. All rights reserved.