SQL - Как получить строки в пределах периода даты, которые находятся в пределах другого периода даты?

У меня есть следующая таблица в DDBB:

enter image description here

С другой стороны, у меня есть интерфейс с параметрами начального и конечного фильтра.

Я хочу понять, как сделать запрос к таблице, чтобы получить только те данные из таблицы, период которых находится в пределах значений, введенных пользователем.

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 находятся в пределах границ.

Вернуться на верх