даты между двумя днями - PullRequest
       4

даты между двумя днями

0 голосов
/ 08 февраля 2012

Я хочу получить все идентификаторы и названия фильмов для заданного диапазона дат. например С 2012-02-01 по 2012-02-20 должны отображаться идентификаторы (1, 2 и 3), аналогично показу фильмов в заданном диапазоне дат.

 movie{ id, name, start_date, end_date, visibility}

id   name  start_date  end_date     visibility
1    abc   2012-01-05   2012-02-10      1
2    xyz   2012-02-05   2012-02-25      1
3    cde   2012-02-19   2012-02-27      1
4    ghi   2012-03-01   2012-03-20      1

Ответы [ 5 ]

2 голосов
/ 08 февраля 2012

У нас есть два интервала:

FieldInterval := (start_date, end_date)

и TestInterval := (@StartDate, @EndDate), определяемые как

@StartDate = '2012-02-01' 
@EndDate = '2012-02-20' 

Для проверки FieldIntervalнаходится внутри TestInterval:

SELECT id 
FROM movie 
WHERE @StartDate <= start_date      
  AND end_date <= @EndDate 

Чтобы проверить, находится ли TestInterval внутри FieldInterval:

SELECT id 
FROM movie 
WHERE start_date <= @StartDate  
  AND @EndDate <= end_date 

Чтобы проверить, перекрываются ли два интервала:

SELECT id 
FROM movie 
WHERE start_date <= @EndDate 
  AND @StartDate <= end_date 
2 голосов
/ 08 февраля 2012

Предполагая, что вы хотите найти перекрытие, предполагая, что значения параметров находятся в таблице с именем params:

SELECT *
  FROM movie AS m, params AS p
 WHERE CASE 
          WHEN m.start_date > p.start_date THEN m.start_date 
          ELSE p.start_date 
       END
       <
       CASE 
          WHEN m.end_date > p.end_date THEN p.end_date 
          ELSE m.end_date 
       END;
0 голосов
/ 09 февраля 2012
select id, name from `movie` where 
end_date >= '2012-01-05' and 
start_date <= '2012-01-20' 

Это работает для меня и выглядит просто.

0 голосов
/ 08 февраля 2012

Полагаю, вы хотите фильмы, в которых start_date и end_date соответствуют двум параметрам, верно?

select id, name from movie
where @startDate < create_date and end_date< @endDate

Если вы сообщите 2012-02-01 и 2012-02-20, он вернет все фильмы, которые имеют start_date и end_date в этом диапазоне

0 голосов
/ 08 февраля 2012
select id  from movie  
where start_date between '2012-02-01' and '2012-02-20' 
and end_date between '2012-02-01' and '2012-02-20'
and start_date <= end_date;
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...