例如,我们有像日期:挑选出日期在MySQL
04/04/2017
12/12/2016
03/04/2016
你怎么可以订购,这将导致该日期:
11/12/2016
03/04/2016
12/04/2017
ORDER BY ASC/DESC
不起作用。请帮忙。
顺便说一句我有他们的药物到期日的数据。我只想让我的listview中的第一个数据成为第一个到期的药物。
例如,我们有像日期:挑选出日期在MySQL
04/04/2017
12/12/2016
03/04/2016
你怎么可以订购,这将导致该日期:
11/12/2016
03/04/2016
12/04/2017
ORDER BY ASC/DESC
不起作用。请帮忙。
顺便说一句我有他们的药物到期日的数据。我只想让我的listview中的第一个数据成为第一个到期的药物。
如果使用此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数据类型时,将它们插入表格中可能是明智的。这样,您就可以获得各种好处,包括使用索引搜索这些日期的功能。
试试这个:
ORDER BY STR_TO_DATE(your_date_column, '%d/%m/%Y')
您的日期格式保存为varchar DD/MM/YYYY
当然使用DateTime数据类型而不是Varchar是最好的解决方案吗?
与日期时间转换Varchar相比,您将在索引的DateTime列上得到更有效的查询计划排序。
这也可以防止无效的日期被存储,这可能与Varchar。
如果您在列上查询,索引日期时间列也将有所帮助。
一切对我而言都是新鲜的。但是我又解决了这个问题。在我将它转换为varchar之前,我的问题是日期时间选择器的格式与mysql日期类型不兼容。 –
这不应该规定你的数据库设计 - 这是不好的做法。您应该将日期选择器中的值转换为插入记录时Mysql接受的DateTime格式。 – Jack
它没有被订购:2016/11/12 03/04/2016 12/04/2017和你的日期字段的类型是什么? –
varchar。我认为这是我的问题。 –