如何使用mysql查询在日期中使用order

时间:2016-08-29 11:29:08

标签: php mysql

我正在使用mySql数据库。但是当我对日期进行排序时,它并不是排序。

SELECT * FROM `client` ORDER By `nextDate` ASC

这是我的查询我希望所有数据的排序日期从客户端表中按升序排列,nextDate字段类型是varchar。所以请问我怎么能按升序排序日期。我想要日期格式化,如2016年12月24日(日/月/日)。

当我使用此查询时,它将仅排序第一天而不是像这样的一个月

01/08/2016
07/10/2016
21/08/2016

但我想要这样排序

01/08/2016
07/08/2016
21/10/2016
25/12/2016

所以,请帮助我,我该怎么做。提前thax,

6 个答案:

答案 0 :(得分:2)

评论太长了。

据推测,您不是将日期存储为日期。而是将其存储为字符串。您应该使用内置的MySQL数据类型 - 这就是它们的用途。如果您必须将日期存储为字符串,则始终使用str_to_date()格式。它排序正确。

您可以使用ORDER By str_to_date(`nextDate`, '%d/%m/%Y') ASC

解决此问题
{{1}}

答案 1 :(得分:2)

使用mysql STR_TO_DATE

您可以使用STR_TO_DATE将字符串转换为MySQL日期值并按结果进行ORDER BY:

SELECT * FROM `client` ORDER BY STR_TO_DATE(`nextDate`, '%d/%m/%Y') ASC ;

注意:

日期应存储在日期数据类型中。

如果您想将所有日期字符串转换为有效日期(yyyy-mm-dd),请按以下步骤操作:

简而言之:

首先将所有当前日期字符串更新为有效日期格式:

UPDATE `client` 
SET `nextDate` = STR_TO_DATE(`nextDate`, '%d/%m/%Y');

现在将nextDate列的数据类型更改为date

ALTER TABLE client MODIFY nextDate DATE;

答案 2 :(得分:0)

"select  * from `client` ORDER BY nextDate ASC";

请在数据库条目中使用TIMESTAMP nextDate数据类型。

答案 3 :(得分:0)

STR_TO_DATE(str,format)

  

这是DATE_FORMAT()函数的反转。它需要一个字符串   str和格式字符串格式。 STR_TO_DATE()返回DATETIME值   如果格式字符串包含日期和时间部分,或DATE或   如果字符串仅包含日期或时间部分,则为TIME。如果   从str中提取的日期,时间或日期时间值是非法的,   STR_TO_DATE()返回NULL并产生警告。   例如

 mysql> SELECT STR_TO_DATE('04/31/2004', '%m/%d/%Y');
            -> '2004-04-31'

这是您的查询

SELECT  * FROM `client` ORDER By  STR_TO_DATE(`nextDate`,'%m/%d/%Y') ASC;

答案 4 :(得分:0)

有两种方式

1)更改nextDate列的数据类型。使用以下查询

ALTER TABLE `client` CHANGE `nextDate` `date` nextDate NOT NULL;

然后按照您的说明使用您的选择查询

SELECT * FROM `client` ORDER By `nextDate` ASC

2)如果您不想改变表模式,那么

SELECT * FROM `client` ORDER BY STR_TO_DATE(nextDate, '%Y-%M-%D') ASC

答案 5 :(得分:0)

SELECT * FROM `client` ORDER BY DATE(`nextDate`) ASC

当您将日期存储为日期

时,按升序排列日期非常有用