2017-09-26 47 views
0

我對如何按日期格式篩選記錄有點困惑。使用DD-MM-YYYY設置MySQL篩選記錄日期格式

我在日期表中有date(yyyy-mm-dd)數據類型的日期列。

例:

date 
----- 
2017-01-29 
2017-01-30 

我想改變格式(DD-MM-YYYY)。我正在使用此代碼

SELECT 
    DATE_FORMAT(`date`, '%d-%m-%Y') as date 
FROM 
    dim_date; 

date 
----- 
29-01-2017 
30-01-2017 

我想用(dd-mm-yyyy)格式過濾記錄。所以我嘗試了這個代碼。

SELECT 
    DATE_FORMAT(`date`, '%d-%m-%Y') date 
FROM 
    dim_date 
WHERE DATE_FORMAT(`date`, '%d-%m-%Y') BETWEEN '20-04-2015' AND '06-09-2017'; 

結果 沒有

但是,如果我嘗試用原始格式過濾(YYYY-MM-DD),它的作品。

SELECT DATE_FORMAT(`date`, '%d-%m-%Y') date 
FROM dim_date 
WHERE DATE_FORMAT(`date`, '%Y-%m-%d') BETWEEN '2015-04-20' AND '2017-01-07'; 

爲什麼Mysql中這種奇怪的行爲?我在這裏錯過了什麼嗎?

我也有這種格式DATE_FORMAT(日期, '%d-%c-%Y')DATE_FORMAT(日期, '%d-%l-%Y') & DATE_FORMAT(日期, '%e-%l-%Y') 沒有笑臉試過了,請讓我知道。

感謝

最大

+0

我沒有看到這兩個查詢之間的區別..。 。請詳細解釋 – scaisEdge

+0

'Date_format'會給你一個字符串。如果你把你的值作爲一個字符串進行比較,那麼就不會有'> = 2'和'<= 0'的字符(這就是'2'和'0'之間'要查找的內容)。你爲什麼要這樣使用它?您可以將您的輸入轉換爲有效日期並比較有效日期。它也可以讓你使用索引。而且,它實際上會根據您的需要進行過濾。 – Solarflare

+0

@scaisEdge我已更新查詢。請立即檢查。對不起,我現在對日期格式感到困惑。 – MAX

回答

0

與您查詢您轉換日期字符串並在錯誤的順序(「20」>「06」),所以不工作之間使用,那麼你比較值。 之間要求第一個最小值和第二個最大值。

如果您正在使用最新工作,你轉換前人的精力將字符串日期
這樣工作的地方正確地將,避免串的行爲是過濾

SELECT date 
FROM dim_date 
WHERE date BETWEEN str_to_dat('20-04-2015', '%d-%m-%Y') 
      AND str_to_date('06-09-2017', '%d-%,-%Y'); 
+0

解釋更好你的評論..請 – scaisEdge

+0

您的更新版本工作..因爲字符串是規則之間的連貫性。但問題..我建議在我的答案使用日期更好的比較..所以相反,轉換字符串中的日期是正確的在日期中轉換字符串..(或使用默認的日期格式) – scaisEdge