SQL:DATE_FORMAT()和顺序

时间:2014-01-02 20:51:21

标签: mysql sql date format

这里有什么问题?我想更改日期格式然后订购它(我使用MySQL):

SELECT * FROM changes ORDER BY DATE_FORMAT(`when`,'%e %c'), `class`, `hour` ASC

2 个答案:

答案 0 :(得分:0)

您会发现date_format(%e%c)将数字字段(在本例中为月和日)转换为varchar,但不包括前导0。这将导致排序问题,因为%c将9月转换为9和10月转换为10,这意味着9月将实际显示为更晚的日期(第一个字符9,大于1)。这也与%e的问题相同,因为本月3日将出现在第20个等之后。

最简单的答案是不将您的日期转换为varchar并允许排序作为日期运行,或者将前导0添加到日期和月份。在你的评论中,你说你想按照几个月和几天的时间排序"和#34;我的约会时间总是在同一年"。正常日期将按年/月/日排序,因此假设年份相同(您说),然后您希望按月和日排序,正常的日期排序应该足够而不进行任何转换。如果这不是您需要的排序顺序,也许您需要澄清,或者提供一些示例数据以及您想要查看的内容。

如果由于某种原因你想要按天分类,然后按月(1月1日,2月1日... 1月2日,2月2日......)你可以使用date_format(%d%m),这是相同的作为原始代码,除了包括前导0并使排序正常运行。

答案 1 :(得分:0)

  

我想更改日期格式,然后订购

可能不是。您可能想按日期订购。目前尚不清楚是否要在SELECT子句中包含格式化日期,但我会假设你这样做。

SELECT *, DATE_FORMAT(`when`,'%e %c') as formatted_date  
FROM changes 
ORDER BY `when`, `class`, `hour` ASC