2014-12-05 34 views
1

我正試圖解決這個選擇語句。 我的問題是列出一個月和一年中正在進行的所有錦標賽。列出一個月/年內正在進行的所有錦標賽

對於爲例,我想列出

這是3月份所有正在進行的冠軍,2005年

我有這樣的欄目:

表:錦標賽 (id_champ,姓名,的startDate,結束日期)。

如何列出2005年3月正在進行的所有錦標賽?

我想這一點:這裏

SELECT * from championships 
where (month(startDate) <= 3 
and year(startDate)<=2005) 
and (month(startDate)<=3 and year(endDate)<=2005 

任何人都知道正確的方式或解決這個問題最好的方法?

+0

我將使用一個參數(要檢查的日期,例如01/01/2014)創建一個存儲過程。首先你得到兩個變量的月份和年份,然後通過包含@ Month和@年份變量(我將在指令之間使用)添加SQL select語句。它會更有效率,你只需要使用一個參數。要使用它:EXEC sp_find_championships_in_progress 。 – K4timini 2014-12-05 23:24:49

回答

2

要捕捉到任何活躍在2005年3月:

select 
* 
from 
championships 
where 
year(enddate) = 2005 
and 3 between month(startdate) and month(enddate). 
+0

如果冠軍賽在2005年過去了,該怎麼辦?這個選擇不會捕獲。 – StarPilot 2014-12-05 23:34:17

+0

是的,這就是爲什麼我投了你的答案。 – Andrew 2014-12-06 05:27:01

2
Select * 
From championships 
where (startdate < `2005/4/1`) AND (enddate > '2005/2/28') 

這就會發現,2005年4月1日前啓動,2月28日之後的任何時間結束任何冠軍,2005年

使用DATEADD實際上是最好的,照顧閏日等。所以考慮:

Select * 
From championships 
where (startdate < dateadd(1, mm, `2005/3/1`)) AND (enddate > dateadd(-1, dd, '2005/3/1')) 

現在,你不必有代碼計算該月的最後一天的開始日期來看,也沒有計算這個月的最後一天的結束日期。