MySQL中按DESC排序的订单日期/时间VARCHAR

MySQL中按DESC排序的订单日期/时间VARCHAR,mysql,sql-order-by,Mysql,Sql Order By,我有以下3个VARCHAR数据: Mar 06 2018 06:42:08 Mar 04 2017 23:21:15 Feb 21 2018 14:48:46 Jul 29 2016 11:56:22 Mar 06 2018 06:41:54 我想知道如何构造我的查询: SELECT `users`.`last_online` FROM `users` ORDER BY ... DESC 这样我就可以得到以下输出 Mar 06 2018 06:42:08 Mar 06 2018 06:41:

我有以下3个VARCHAR数据:

Mar 06 2018 06:42:08
Mar 04 2017 23:21:15
Feb 21 2018 14:48:46
Jul 29 2016 11:56:22
Mar 06 2018 06:41:54
我想知道如何构造我的查询:

SELECT `users`.`last_online` FROM `users` ORDER BY ... DESC
这样我就可以得到以下输出

Mar 06 2018 06:42:08
Mar 06 2018 06:41:54
Feb 21 2018 14:48:46
Jul 29 2017 11:56:22
Mar 04 2017 23:21:15
注意:我不想使用DATETIME,我使用的是VARCHAR,请不要提出其他建议

更新

根据Uuerdo回答中的文档,我尝试了以下查询,但尽管它似乎可行,但没有成功:

 SELECT `users`.`last_online` FROM `users` ORDER BY STR_TO_DATE(`users`.`last_online`, '%M %d %Y %h:%i:%s') DESC
我需要考虑m/dd/yyyyh:i:s,我需要用哪些函数来正确地构造这个查询,结果是什么?

尝试使用这个:

SELECT `users`.`last_online`,
FROM `users` 
ORDER BY STR_TO_DATE(`users`.`last_online`, '%M %d %Y %H:%i:%s') DESC

您需要在24小时内使用“%H”而不是“%H”

由于您的日期具有月份名称,因此在不将其转换为日期的情况下对其进行排序的唯一方法是对所有月份进行硬编码。你必须说一些类似于1月1日、2月2日……等等的话。转换为日期并对其进行排序会容易得多。不需要保存转换后的值,只需将其用于排序。@uuerdo感谢您给出了非常宽泛的答案,将我与我已经阅读过的内容联系起来,这让我提出了一个问题,您真是个好帮手。@clinomaniac我将如何做,我希望使用哪个函数?在我的SQL查询中实现函数对我来说是新的。我用C++和WinAPI工作了一辈子,我用SQL做的唯一工作是C++ +MySQL连接器库。但没什么直接的。@SymcoJohnson不需要对试图帮助你的人冷嘲热讽和不屑一顾。你没有提到你看过这个网站,Uuerdo认为这可能会有所帮助。您是否可以将varchar转换为date进行排序,还是尝试通过硬编码值对字符串进行排序?将%H从小写更改为大写会导致查询正常工作。谢谢