2016-01-03 50 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