SQL 'перекрытия' получают только даты между началом и концом (не включая даты начала и окончания) - PullRequest
0 голосов
/ 07 марта 2011

Я использую этот запрос, чтобы получить объекты, перекрывающие период между " start_date " и " end_date ", более того, я хотел бы получить объекты с датами end на start_date и объекты начинаются с конечной даты .

Я использую

where("(start_date, end_date) overlaps (date ?, date ?), start_date, end_date"

Но у объектов есть даты <= start_date </strong> или > = end_date is not get.

Это «перекрытие» позволяет получить только объекты, имеющие даты start_date <даты <end_date </strong>, а не «=».

Например, start_date = '2011/2/1', end_date = '2011/3/31'. Объекты с датой окончания «2011/2/1» или началом «2011/3/31» не будут получены, будут получены только даты между «2011/2/1» и «2011/3/31». как включить объекты с датой окончания в start_date и начать в end_date?

---------------------- Редактировать --------------------- -------

Я пытаюсь использовать:

where("(start_date, end_date) overlaps (date ?, date ?), start_date-1.day, end_date+1.day"

, чтобы решить проблему, но когда я делаю, как указано выше, если start_date = '2011/2/1', end_date = '2011/3/31', тогда объекты содержат '2011/1/31', а также возвращает Предполагается, не должно быть получить.

Ответы [ 3 ]

1 голос
/ 07 марта 2011

На стороне SQL вы хотите сгенерировать что-то вроде этого, предполагая

  • S1, E1 - даты начала и окончания первый диапазон,
  • S2, E2 - даты начала и окончания второй диапазон,
  • Ни один из S1, E1, S2, E2 не равен NULL

    ГДЕ (S1, E1) ПЕРЕКРЫТИЯ (S2, E2) ИЛИ (E1 = S2) ИЛИ (E2 = S1)

Вам нужны оба предложения «ИЛИ», потому что в общем случае вы не знаете, какой диапазон раньше.

0 голосов
/ 07 марта 2011

Просто предполагая, что таблица Details и имеет атрибуты (включая дату), предположим, что я хочу получить информацию о двух конкретных датах, начиная с start_date до end_date.

Итак, Details. где (["дата между?and? ", start_date, end_date]) выдаст необходимую информацию, включая даты начала и окончания. Надеюсь, это поможет

0 голосов
/ 07 марта 2011

попробуйте это:

where("start_date >= ? and end_date <= ?", start_date.beginning_of_day, end_date.end_of_day)

, что должно включать все от start_date до end_date ;-) надеюсь, это поможет!

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...