2016-01-03 86 views
0

例如,我們有像日期:挑選出日期在MySQL

04/04/2017 
12/12/2016 
03/04/2016 

你怎麼可以訂購,這將導致該日期:

11/12/2016 
03/04/2016 
12/04/2017 

ORDER BY ASC/DESC不起作用。請幫忙。

順便說一句我有他們的藥物到期日的數據。我只想讓我的listview中的第一個數據成爲第一個到期的藥物。

+0

它沒有被訂購:2016/11/12 03/04/2016 12/04/2017和你的日期字段的類型是什麼? –

+1

varchar。我認爲這是我的問題。 –

回答

0

如果使用此function

STR_TO_DATE('04-04-2017', '%d/%m/%Y') 

你會轉換您的包含日期的varchar轉換爲DATE數據類型。這些排序正確。

所以,

ORDER BY STR_TO_DATE(expireation_date_column, '%d/%m/%Y') NULLS FIRST 

會給你一個有用的排序。 NULLS FIRST部分將向您顯示格式不正確的日期,如果您有任何排序的頂部的行。

如果這是一個大項目,將這些過期日期轉換爲DATE數據類型時,將它們插入表格中可能是明智的。這樣,您就可以獲得各種好處,包括使用索引搜索這些日期的功能。

0

試試這個:

ORDER BY STR_TO_DATE(your_date_column, '%d/%m/%Y') 

您的日期格式保存爲varchar DD/MM/YYYY

0

當然使用DateTime數據類型而不是Varchar是最好的解決方案嗎?

與日期時間轉換Varchar相比,您將在索引的DateTime列上得到更有效的查詢計劃排序。

這也可以防止無效的日期被存儲,這可能與Varchar。

如果您在列上查詢,索引日期時間列也將有所幫助。

+0

一切對我而言都是新鮮的。但是我又解決了這個問題。在我將它轉換爲varchar之前,我的問題是日期時間選擇器的格式與mysql日期類型不兼容。 –

+0

這不應該規定你的數據庫設計 - 這是不好的做法。您應該將日期選擇器中的值轉換爲插入記錄時Mysql接受的DateTime格式。 – Jack