SQL - Как получить строки в пределах периода даты, которые находятся в пределах другого периода даты?
У меня есть следующая таблица в DDBB:
С другой стороны, у меня есть интерфейс с параметрами начального и конечного фильтра.
Я хочу понять, как сделать запрос к таблице, чтобы получить только те данные из таблицы, период которых находится в пределах значений, введенных пользователем.
i.e
Если пользователи определяют только start = 03/01/2021, то ожидаемым результатом должны быть строки с id 3, 5 и 6.
если пользователи определяют только end = 03/01/2021, то ожидаемым результатом должны быть строки с id 1 и 2.
если пользователи определят начало =03/01/2021 и конец =05/01/2021, то ожидаемым результатом должны быть строки с id 3 и 5.
Надеюсь, это имеет смысл.
Спасибо
Я предположу, что start_date и end_date здесь DateFields [Django-doc], и что у вас есть словарь с 'start' и 'end' в качестве (необязательного) ключа, и они отображаются на объект date, так что возможный словарь может быть таким:
# scenario 3
from datetime import date
data = {
'start': date(2021, 1, 3),
'end': date(2021, 1, 5)
}
Если вы не хотите фильтровать по start и/или end, то либо ключ не в словаре data, либо он отображается на None.
Вы можете сделать фильтр с помощью:
filtr = {
lu: data[ky]
ky, lu in (('start', 'start_date__gte'), ('end', 'end_date__lte'))
if data.get(ky)
}
result = MyModel.objects.filter(**filtr)
Это позволит отфильтровать объекты MyModel, чтобы получить только MyModel, где start_date и end_date находятся в пределах границ.
