2012-02-08 11 views
0

指定した期間のすべての映画IDと名前を取得したいと考えています。例えば2012-02-01から2012-02-20には、ids(1、2、3)が表示され、指定した期間に映画が表示されます。は2日以内の日付です

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 
+2

映画のstart_dateまたはend_dateを日付間隔と比較しますか? –

+0

@KorhanÖztürkはい。 – Sara

+1

質問が解釈できる4つ以上の方法があります。クエリでテストする内容を明確にしてください。 –

答えて

0
select id, name from `movie` where 
end_date >= '2012-01-05' and 
start_date <= '2012-01-20' 

これは私とシンプルなそのルックスのために動作します。

0
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; 
0

私は右、あなたがSTART_DATEと2つのパラメータに収まるEND_DATE映画をしたいと仮定?あなたが2012-02-01と2012-02-20に通知した場合

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

それは仮定して、あなたが重複を見つけたいという推測その範囲

2

間START_DATEとEND_DATEを持つすべての映画を返します。パラメータ値はparamsという名前のテーブルにあります。FieldInterval := (start_date, end_date)

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

'm.start_date <= p.end_dateとp.start_date <= m.end_date'は同等ですか? –

+0

@ypercube:ヒント:結果に重複を表示する場合はどうなりますか? – onedaywhen

+0

クール、私はそれを考えなかった! –

2

我々は2つの間隔を持っています

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

TestIntervalFieldInterval内にあるかどうかをテストする:

TestInterval内にあるかどうかを試験するため

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

として定義

TestInterval := (@StartDate, @EndDate)

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

は、2つの間隔が重なるかどうかをテストするには:

SELECT id 
FROM movie 
WHERE start_date <= @EndDate 
    AND @StartDate <= end_date 
関連する問題