MySql在Mmm-dd-yyyy中按(varchar)命令排序

时间:2013-06-13 17:30:06

标签: mysql sql datetime sql-order-by

所以不幸的是,我有一个VARCHAR列的日期格式如下:Jun-13-2013

(我知道这样做不正确,应该以标准格式存储在DATETIME列中)

我正在尝试获取每一行中的所有数据,并将该VARCHAR列作为DATETIME进行ORDER,但是我没有找到任何可以转换我格式不佳的日期列进行排序的内容。

这是我的查询:

$result = mysql_query("SELECT * FROM archive ORDER BY crapdates DESC");

但我正在尝试将crapdates列转换为日期时间......这是否可能?

I'm not finding a mmm-dd-yyyy format conversion anywhere

感谢您查看

3 个答案:

答案 0 :(得分:2)

您希望STR_TO_DATE()函数将现有varchar列转换为日期值。

我绝对建议您创建一个新列并使用STR_TO_DATE()将现有列中的值复制到新列中,而不是直接在STR_TO_DATE()中使用ORDER BY SELECT

UPDATE archive SET newdate = STR_TO_DATE(crapdate,'%b-%e-%Y');

如果无法更改表结构,可以对现有列进行排序,如下所示:

SELECT * FROM archive ORDER BY STR_TO_DATE(crapdate,'%b-%e-%Y') DESC;

答案 1 :(得分:1)

“您可以使用STR_TO_DATE()将字符串转换为MySQL日期值,并ORDER BY结果:

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

但是,最好将列转换为DATE数据类型,而不是使用字符串。“

通过xdazz答案:https://stackoverflow.com/a/10637668/1146492

答案 2 :(得分:0)

我尝试了 str_to_date 但它没有返回想要的结果然后我找到了这个代码,但在我的情况下日期是这种格式 03/15/2021

ORDER BY SUBSTR(crapdates, 7) DESC, ORDER BY SUBSTR(crapdates, 1,2) DESC,ORDER BY SUBSTR(crapdates, 4,2) DESC

它会返回你想要的排序。