如何在SQLite数据库中检索两个日期之间的数据

3

我的表格中有一个名为OrderDate的日期类型字段,格式为dd/MM/yy,这个字段属于表格中的所有记录。

我需要筛选出那些符合两个日期的订单,例如O.Order_Date between '01/11/12' and '15/11/12'。但是它也会选择那些不属于11月和今年的记录。

查询结果

请问有人能指导我如何在两个日期之间获取正确的数据吗?


我认为问题出在日期格式上,尝试使用 YYYY-MM-DD。请查看此页面 - tkanzakic
4个回答

3

查询

insert into test (t) select '2012-01-15';

insert into test (t) select '2012-11-16';

select * from test where t between '2012-01-01' and '2012-02-01';

演示示例


正如在这里所看到的 https://dev59.com/2Gsy5IYBdhLWcg3w-i_h ,你可能需要处理一下旧数据。 - Drew
谢谢,但是我的表中有一个日期字段,它的格式是dd/MM/yy,我该如何在查询中将其转换为YYYY/MM/DD格式进行比较呢?因为现在我无法设置特定的格式,这已经在整个项目中传播开来了。 - Pandey_Laxman
将该表复制到另一个名为B的表中。现在在B中执行更新语句,更改每一行的日期格式为YYYY-MM-DD,注意1应为01。然后运行测试。 - Drew
你需要先更改你的数据,需要帮忙吗? - Drew
我所说的和那个链接建议的是,如果你不把日期保存为YYYY-MM-DD格式,那么SQLite会将其保存为字符串而不是日期。因此,在这种情况下,尝试检索日期范围将失败。 - Drew

2

您应该尝试使用大于号(>)和小于号(<)。

例如: 当 O.Order_Date > '01/11/12' 且 O.Order_Date < '15/11/12' 时


在sqlite中,也有获取日期的年份、日期和月份的函数。month(O.Order_Date),year(O.Order_date)。 - Duyen-Hoa

2

尝试另一种格式:YYYY-MM-DD

O.Order_Date 在 '2012-11-01' 和 '2012-11-15' 之间

http://www.sqlite.org/lang_datefunc.html

Time Strings

A time string can be in any of the following formats:

YYYY-MM-DD
YYYY-MM-DD HH:MM
YYYY-MM-DD HH:MM:SS
YYYY-MM-DD HH:MM:SS.SSS
YYYY-MM-DDTHH:MM
YYYY-MM-DDTHH:MM:SS
YYYY-MM-DDTHH:MM:SS.SSS
HH:MM
HH:MM:SS
HH:MM:SS.SSS
now
DDDDDDDDDD

你能试一下这个简单的查询吗:SELECT Order_Date FROM T_Ohead WHERE Order_Date between '2012-11-01' and '2012-11-15' ORDER BY Order_Date - Alex

0

如何从dd/MM/yy((注释2,答案2))转换为YYYY/MM/DD?

update tableName
set date =
'20' || substr(substr(date, instr(date, '/')+1), instr(substr(date, instr(date, '/')+1), '/')+1)
|| '/' ||
case when length(substr(date, instr(date, '/')+1, instr(substr(date, instr(date, '/')+1),'/')-1))=2
then substr(date, instr(date, '/')+1, instr(substr(date, instr(date, '/')+1), '/')-1)
else '0'||substr(date, instr(date, '/')+1, instr(substr(date, instr(date, '/')+1), '/')-1)
end
|| '/' ||
case when length(substr(date,1, instr(date, '/')-1 )) =2
then substr(date,1, instr(date, '/')-1 )
else '0'||substr(date,1, instr(date, '/')-1 )
end

否则看看最后两个答案这里


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接