2011-08-12 23 views
0

我有條目在我的表像SQL日期

uid/start/end/value 

我現在要選擇哪個處於一個特定月份的所有條目。因此,如果用戶選擇「六月」,我想獲得所有條目比六月份可用。開始和結束被保存爲時間戳(不能改變)。我發現這樣的東西:

WHERE month(start)=5 

這是行不通的,但不幸的是它只給了我在六月份開始的條目。我當然可以在最後添加相同的內容,但如果一個條目在五月份開始並在七月份結束,這仍然沒有幫助。我當然可以計算時間戳並直接進行比較,但是我想選擇任何一年的6月 - 不只是一個特定的時間戳。我想的是一樣的東西:

WHERE month(start) <= 5 && month(end) >= 5 

這將很好地工作時間戳,但顯然這與去年中斷的問題。

有沒有一個很好的解決方案來做到這一點,而不計算下一年的所有時間戳和創建一個生病的大查詢?

回答

0

好吧,我想通了這一點:

WHERE month(start)=5 
OR month(end)=5 
OR (month(start)<=5 AND month(end) >= 5) 
OR (month(start)<=5 AND year(start)<year(end)) 
OR (month(end)>=5 AND year(start)<year(end)) 

我認爲這是正確的,工作正常。

0

它看起來應該可以工作,但它非常複雜,而且我非常確定使用月份函數意味着你不會碰到任何索引。

你也可以改換爲:

where start <= 1 Jun 2011 
and end >= 1 Jul 2011 
+0

是的表現可能不會太好,但它是我所需要的速度不夠快。如果我想要在定義的時間範圍內輸入,您的解決方案就是簡單的問題。但我希望所有參賽作品爲「2011年6月」,「2012年6月」,「2013年6月」等,但我不知道多少年。所以如果我只是這樣做,那麼我會得到一個非常大的查詢,因爲我必須在未來的每一年檢查這兩年的所有年份。 – Flo