簡體   English   中英

兩天之間的日期

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM