我有一个查询
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'
知道我错了吗?
在我的数据库中,我有这三行,
这有效,
SELECT * FROM `events` where start_date > '2019-11-17' and end_date < '2019-11-19'
但是为什么不 <='2019-11-18'?有什么主意吗?
我设法在结束日期上增加了1天来解决它。
我的解决方案
start_date = datetime.fromtimestamp(start_date/1000.0)
end_date = datetime.fromtimestamp(end_date/1000.0)
start_date = start_date.strftime('%Y-%m-%d')
end_date = (end_date + timedelta(days=1)).strftime('%Y-%m-%d')
现在可以正常工作
events = Event.objects.filter(start_date__gt=start_date,end_date__lt=end_date)
答案 0 :(得分:1)
您的日期已超过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'
如果您要对下面的表达式求值,它将return 0
select cast('2019-11-18 16:23:01' as datetime) <= '2018-11-18'
答案 1 :(得分:0)
或者您可以使用Django Queryset仅按日期过滤datetime字段:
events = Event.objects.filter(start_date__date__gte=start_date, end_date__date__lte=end_date)
https://docs.djangoproject.com/en/2.2/ref/models/querysets/#date