兩個@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;
結果:
下一步 - 轉換這些字符串到日期。好吧,這只是包裹起來與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;
結果:
最後一步 - 找到「從」日期的最早和最晚「到」日期:
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;
結果:
感謝您的迴應和指導,Galz。我會嘗試一下。之後不久我會更新這篇文章。 – microhtml
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
@microhtml - 見編輯在答案中。希望這有助於 – Galz