MYSQL按日期订购,带有日期\格式
我有一个日期类型的列(MYSQL按日期订购,带有日期\格式,mysql,sql,Mysql,Sql,我有一个日期类型的列(startdate) 我使用DATE_格式从查询中获取“XX月,XXXX”结果 但当我按日期排序时,会按字母顺序排序。。。如何按时间顺序排列日期 当我按顺序调用startdate列时,是否可以对其进行不同的格式设置,以便按时间顺序排序 这是一个问题 SELECT location, course, DATE_FORMAT( startdate, '%M %D, %Y' ) AS startdate FROM `courses` c LEFT JOIN `
startdate
)
我使用DATE_格式从查询中获取“XX月,XXXX”结果
但当我按日期排序时,会按字母顺序排序。。。如何按时间顺序排列日期
当我按顺序调用startdate列时,是否可以对其进行不同的格式设置,以便按时间顺序排序
这是一个问题
SELECT location, course, DATE_FORMAT( startdate, '%M %D, %Y' ) AS startdate
FROM `courses` c
LEFT JOIN `locdate` l ON c.id = l.id
ORDER BY startdate ASC
LIMIT 0, 10
不要按格式化字符串版本排序。它的格式不允许这种排序,因为它不是在最重要的组件中首先排序。按实际日期字段排序,该字段自然会按正确顺序排序 如果您的日期是
yyyy-mm-dd
格式,那么它自然会按字符串排序
SELECT ... DATE_FORMAT(...) AS formatted ... ORDER BY `startdate` ASC
^^^^^^^^--different alias ^^^^^^---actual field
可以使用别名执行此操作。我不得不猜测这些专栏是从哪里来的,但这里有一个尝试:
SELECT l.location, c.course, DATE_FORMAT(l.startdate, '%M %D, %Y' ) AS startdate
FROM `courses` c
LEFT JOIN `locdate` l ON c.id = l.id
ORDER BY l.startdate ASC
LIMIT 0, 10;
通过使用表别名,它知道如何使用表列中的版本。我刚刚遇到这个问题,但这里是我的解决方案。 将日期格式化,然后添加一个额外的列
$query = "SELECT `StartDate` as datesort,DATE_FORMAT(`StartDate`,'%d %M %Y') as Date, FROM `courses`";
我正在使用StartDate
并将其别名为datesort。然后我使用datesort进行排序。这样我可以保持StartDate的格式,并使用datesort进行排序
这是一个恼人的问题,但我的方法将其排序(忽略双关语)。正如@Marc回答的那样,
按l.startdate ASC排序可以,但是将DATE\u格式(l.startdate,'%M%D,%Y')更改为startdate
将DATE\u格式(l.startdate,'%M%D,%Y')更改为startdate\MDY
并且在脚本中使用startdate
,改用startdate\u MDY
。