Mysql日期\格式排序不起作用

Mysql日期\格式排序不起作用,mysql,cakephp,Mysql,Cakephp,我在cakephp框架下工作 因为我将日期字符串存储在varchar字段中。我需要转换它的时区后,需要改变格式。这是问题所在 SELECT DATE_FORMAT(cast( CONVERT_TZ(`leads`.`221`, 'UTC', 'America/Los_Angeles') as datetime), '%b %d %Y %h:%i %p') from leads order by DA

我在cakephp框架下工作

因为我将日期字符串存储在varchar字段中。我需要转换它的时区后,需要改变格式。这是问题所在

SELECT DATE_FORMAT(cast( CONVERT_TZ(`leads`.`221`,
                        'UTC',
                        'America/Los_Angeles') as datetime), '%b %d %Y %h:%i %p') 
from leads order by DATE_FORMAT(cast( CONVERT_TZ(`leads`.`221`,
                        'UTC',
                        'America/Los_Angeles') as datetime), '%b %d %Y %h:%i %p') desc.
这里时区隐蔽,日期格式一切正常。但在对该字段进行排序时,它的工作方式类似于字母顺序,而不是日期顺序

我知道我们需要从orderby字段中删除额外的mysql函数。那么只有当我们给予的时候它才会起作用

 `order by `leads`.`221` desc` 
但我不能这样给予。因为它是由cakephp框架创建的。我无法超越


请给出一个解决方案。

在查询中使用AS将允许您按正在执行的操作进行排序

SELECT DATE_FORMAT(cast( CONVERT_TZ(`leads`.`221`,
                    'UTC',
                    'America/Los_Angeles') as datetime), '%b %d %Y %h:%i %p') 
as `new_date` from `leads` order by `new_date` DESC;  

首先尝试将字符串转换为日期,如“选择日期格式(STR_to_date('01/12/2013','%d/%m/%Y'),'%Y%m')”;如果您给我一些leads列的示例数据,肯定会为您提供正确的解决方案。