MySQL ORDER BY Date字段,不是日期格式

时间:2013-06-05 09:24:11

标签: php mysql

我有一个包含DD / MM / YYYY格式的日期的字段,我需要按此字段对结果DESC进行排序,但它保存为VARCHAR,我无法更改。有解决方法吗?

我真的没有办法改变字段类型,所以请不要说这是一个不好的方法,因为我已经知道了。我只需要知道是否可能。

提前感谢您的任何帮助和建议。

6 个答案:

答案 0 :(得分:18)

您可以通过以下方式进行,

SELECT ...
FROM ...
ORDER BY STR_TO_DATE(yourDate,'%d-%m-%Y') DESC

答案 1 :(得分:2)

使用STR_TO_DATE

http://dev.mysql.com/doc/refman/5.6/en/date-and-time-functions.html#function_str-to-date

...
order by str_to_date(myCol, '%d/%m/%Y')

答案 2 :(得分:0)

使用此

STR_TO_DATE

   SELECT * FROM table_name ORDER BY  STR_TO_DATE(date_field, '%d-%M-%Y') DESC

答案 3 :(得分:0)

ORDER BY CONCAT(SUBSTR(field, 7, 4), SUBSTR(field, 4, 2), SUBSTR(field, 1, 2)) DESC

答案 4 :(得分:0)

使用STR_TO_DATE() MySQL函数:

SELECT * FROM your_table ORDER BY STR_TO_DATE(your_date_column, '%d/%M/%Y') DESC;

旁注: STR_TO_DATE将字符串转换为日期,而DATE_FORMAT将日期转换为字符串

答案 5 :(得分:0)

这取决于您如何在日期字段中存储日期。就我而言,它用“ /”分隔,所以我使用了-

...
ORDER BY STR_TO_DATE(report_date, '%m/%d/%Y') DESC;

如果您使用“-”分隔日期,月份和年份,则可以使用-

...
ORDER BY STR_TO_DATE(report_date, '%m-%d-%Y') DESC;

enter image description here