Mysql 基于单日开始日期和结束日期的Django过滤器

Mysql 基于单日开始日期和结束日期的Django过滤器,mysql,django,Mysql,Django,我有一个问题 start_date = '2019-11-17' end_date = '2019-11-18' events = Event.objects.filter(start_date__gte=start_date,end_date__lte=end_date) 这不会返回任何结果。。我尝试了直接mysql查询,即使这样也不会返回任何结果 SELECT * FROM `events` where start_date >= '2019-11-17' and end_date

我有一个问题

start_date = '2019-11-17'
end_date = '2019-11-18'

events = Event.objects.filter(start_date__gte=start_date,end_date__lte=end_date)
这不会返回任何结果。。我尝试了直接mysql查询,即使这样也不会返回任何结果

SELECT * FROM `events` where start_date >= '2019-11-17' and end_date <= '2019-11-18'
现在这是有效的

events = Event.objects.filter(start_date__gt=start_date,end_date__lt=end_date)

您的日期已超过2019-11-18,请将您的
datetime
列转换为
date

SELECT * FROM `events` where cast(start_date as date) >= '2019-11-17' and cast(end_date as date) <= '2019-11-18'

或者,您可以使用django Queryset仅按日期筛选datetime字段:

events = Event.objects.filter(start_date__date__gte=start_date, end_date__date__lte=end_date)

开始日期和结束日期列的类型是什么?他们是约会还是约会时间?在任何情况下,最有可能的是您没有这些日期的匹配数据。@TimBiegeleisen datetime。。但是将开始日期调整为
SELECT*FROM`events`where start\u date>='2019-10-30'和end\u date您是否试图查找范围与
where
子句中包含的日期相交的任何记录?@TimBiegeleisen实际上,我的查询应该返回屏幕截图中的第二行和第三行,这就是我在这个范围内的目标
start_date>='2019-11-17'和end_date@TimBiegeleisen感谢您努力找到解决方案。:)正如您所写,我从铸造中得到了结果,但我正在考虑如何用django queryset实现它objects@overflow,你可以试试这个你的回答给了我一些想法,接受了。。谢谢,这应该行。。我会尽力让你知道的
SELECT * FROM `events` where cast(start_date as date) >= '2019-11-17' and cast(end_date as date) <= '2019-11-18'
select cast('2019-11-18 16:23:01' as datetime)  <= '2018-11-18'
events = Event.objects.filter(start_date__date__gte=start_date, end_date__date__lte=end_date)