2012-02-29 102 views
1

我有以下問題:兩個日期列,一個日期。我如何獲取數據?

在mysql中,我有一個表,其中包含兩個日期列start_date和end_date。日期格式爲yyyy-mm-dd。我想要做的是從特定日期的所有行中獲取所有數據,可以說'2012-03-05'列出了這些日期列之一或之間的內容。

如何創建一個很好的獲取所需數據的sql查詢?我已經檢查了兩者之間的關係,但我不確定這是否是最好的選擇。我想這通常是一個簡單的任務,但我無法找出一個好的查詢。

謝謝。

+0

我想我可以做類似SELECT * FROM測試,其中起始日期<= '2012-03-05' 日期和結束日期> =「2012- 03-05' 。但是有更好的方法嗎? – Ms01 2012-02-29 21:53:29

+0

如果與'start_date' /'end_date'的間隔結束,通常只有其中一個包含*; *另一個是*獨佔*。這樣做是爲了確保多個記錄不匹配具有相同日期的查詢。哪一個是包容性的,哪一個不依賴於你的數據庫設計。 – dasblinkenlight 2012-02-29 22:01:38

回答

4
SELECT * FROM table WHERE start_date <= '2012-02-29' AND end_date >= '2012-02-29'; 

應該這樣做。

+0

謝謝,我只是想過這個模型。它需要一段時間才能沉沒下來。 :) – Ms01 2012-02-29 21:54:32

+0

沒問題。很高興我能幫上忙 :)。 – Corbin 2012-02-29 21:55:16

+0

這也會做到這一點,但如果你要從** TABLE **中選擇一些東西,你會得到一個語法錯誤;-) – halfer 2012-03-01 00:09:37

3

這是一種使用日期範圍來構建表格的非常常見的方法,特別是在temporal database設計中。它可以讓你非常有效地執行基於範圍的查詢,假設兩列的索引都存在。您查詢的數據是這樣的:

select * 
from mytable t 
where t.start_date <= @desired_date and t.endDate > @desired_date 

@desired_date是您想查詢,例如日期'2012-03-05'。

注意<=在另一面,>在另一面,沒有=。這樣做是爲了確保起始範圍定義非重疊間隔。

2

不知道,嘗試是這樣的:

SELECT 
    * 
FROM 
    mytable 
WHERE 
    '2012-03-05' BETWEEN start_date AND end_date 
2
SELECT * FROM mytable 
WHERE '2012-03-05' BETWEEN start_date AND end_date; 
+0

哦,同樣的'。擁有+1! – halfer 2012-02-29 21:54:32

+0

我最喜歡那個版本。謝謝 :) – Ms01 2012-02-29 21:56:22

相關問題