2016-11-03 417 views
0

我已經繼承了一個名爲'dateRange'的列的數據庫。我被要求找到最早的/開始的和最新的/結束的日期。這裏是原始數據列的樣子:在sql中查找日期範圍的最小值和最大值

dateRange Column

這裏是我的sql查詢:

SELECT 
@EarliestDate := SUBSTRING_INDEX(`dateRange`,'-',1) as StartingDate, 
@LatestDate := SUBSTRING_INDEX(`dateRange`,'-',-1) as EndingDate, 
MIN(@EarliestDate) as LowRange, 
MAX(@LatestDate) as HighRange 
FROM `dateRangeTable`; 

Output from Query

輸出顯示兩列有兩個值:1)EarliestDay( 01/01)和2)LatestDay(2015年1月31日)。

很明顯,這是不正確的,因爲最新的日期應該是12/31/15而不是01/31/2015。

我在做什麼錯?任何反饋將不勝感激。

回答

0

兩個@EarliestDate@LatestDate存儲爲字符串,不日期。 因此,MySQL將它們排序爲字符串,這意味着MAX和MIN會按字母順序給出第一個和最後一個。

要使MySQL正確排序,您需要將字符串轉換爲DATE,然後MAX和MIN將返回最早和最晚的日期。

閱讀更多關於如何將文本轉換爲日期here

編輯

OK - 讓我們做一步一步來。 第一步是將每個記錄從''和'到'日期分開,仍然保留爲字符串。

請注意,'from'日期缺少一年,所以我們需要從'to'日期抓取這一年的年份。

這裏有一個查詢,做的是:

SELECT dateRange, 
CONCAT(SUBSTRING_INDEX(`dateRange`,'-',1), '/', SUBSTRING_INDEX(`dateRange`,'/',-1)) AS from_date, 
SUBSTRING_INDEX(`dateRange`,'-',-1) AS to_date 
FROM dateRangeTable; 

結果:

enter image description here

下一步 - 轉換這些字符串到日期。好吧,這只是包裹起來與STR_TO_DATE功能完全一樣,你做的事:

SELECT dateRange, 
STR_TO_DATE(CONCAT(SUBSTRING_INDEX(`dateRange`,'-',1), '/', SUBSTRING_INDEX(`dateRange`,'/',-1)), '%m/%d/%y') AS from_date, 
STR_TO_DATE(SUBSTRING_INDEX(`dateRange`,'-',-1), '%m/%d/%y') AS to_date 
FROM dateRangeTable; 

結果:

enter image description here

最後一步 - 找到「從」日期的最早和最晚「到」日期:

SELECT 
MIN(STR_TO_DATE(CONCAT(SUBSTRING_INDEX(`dateRange`,'-',1), '/', SUBSTRING_INDEX(`dateRange`,'/',-1)), '%m/%d/%y')) AS min_from_date, 
MAX(STR_TO_DATE(SUBSTRING_INDEX(`dateRange`,'-',-1), '%m/%d/%y')) AS max_to_date 
FROM dateRangeTable; 

結果:

enter image description here

+0

感謝您的迴應和指導,Galz。我會嘗試一下。之後不久我會更新這篇文章。 – microhtml

+0

Galz,經過幾次試驗,我仍然有麻煩。以下是我所做的:1)評論最小和最大值,並添加STR_TO_DATE函數。不幸的是我得到NULLS。這裏是我的代碼:SELECT @EarliestDate:= SUBSTRING_INDEX('dateRange',' - ',1)as StartingDate, @LatestDate:= SUBSTRING_INDEX('dateRange',' - ', - 1)as EndingDate, #MIN (@EarliestDate)作爲LowRange, #MAX(@LatestDate)爲高變速, STR_TO_DATE( '日期ENDINGDATE', '%M /%d /%Y')AS STR2DATE FROM 'movieTable' – microhtml

+0

@microhtml - 見編輯在答案中。希望這有助於 – Galz

相關問題