[英]dates in between two days
我想獲取給定日期范圍內的所有電影ID和名稱。 例如2012-02-01至2012-02-20應該顯示ids(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
假設參數值在名為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;
我們有兩個間隔:
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
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;
我假設您想要將start_date和end_date放入2個參數的電影,對嗎?
select id, name from movie
where @startDate < create_date and end_date< @endDate
如果您通知2012-02-01和2012-02-20,它將返回所有start_date和end_date在該范圍內的電影
select id, name from `movie` where
end_date >= '2012-01-05' and
start_date <= '2012-01-20'
這對我有用,看起來很簡單。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.