首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >在ASC中对DATE_FORMAT '%Y-%c‘排序

在ASC中对DATE_FORMAT '%Y-%c‘排序
EN

Stack Overflow用户
提问于 2018-09-09 08:52:14
回答 2查看 285关注 0票数 1

我有疑问

代码语言:javascript
运行
复制
SELECT DATE_FORMAT(sys_date, '%Y-%c') as month, COUNT(DATE_FORMAT(sys_date, '%Y-%c'))
FROM sale
GROUP BY month
ORDER BY month ASC

返回以下结果,

代码语言:javascript
运行
复制
month   COUNT(DATE_FORMAT(sys_date, '%Y-%c'))
2017-10 204
2017-11 178
2017-12 88
2017-7  3
2017-8  1
2017-9  153
2018-1  91
2018-2  86
2018-3  67
2018-4  109
2018-5  131
2018-6  47
2018-7  50
2018-8  36
2018-9  39

如何使输出按正确的升序排列?喜欢,

代码语言:javascript
运行
复制
month   COUNT(DATE_FORMAT(sys_date, '%Y-%c'))
2017-7  3
2017-8  1
2017-9  153
2017-10 204
2017-11 178
2017-12 88
2018-1  91
2018-2  86
2018-3  67
2018-4  109
2018-5  131
2018-6  47
2018-7  50
2018-8  36
2018-9  39

我尝试过使用MONTH(month), YEAR(month) ASC和网站上列出的许多其他选项。但似乎什么都起不到作用。

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2018-09-09 08:59:45

基于月份对直接从sys_date获取的数据进行排序。由于启用了only_full_group_by模式,因此需要在SELECT部件中获取YEARMONTH值,以便ORDER BY子句可以用于排序。使用以下查询:

代码语言:javascript
运行
复制
SELECT YEAR(sys_date) as ysysdate, 
       MONTH(sys_date) as msysdate, 
       DATE_FORMAT(sys_date, "%Y-%c") as ymonth,
       COUNT(*)
FROM sale
GROUP BY ymonth
ORDER BY ysysdate ASC, msysdate ASC
票数 0
EN

Stack Overflow用户

发布于 2018-09-09 09:23:15

这是因为计算出的month是按字母顺序排列的。但是您可以保留该ORDER BY month,只需将其更改为前导为0的格式,时间为<10个月。

这样,字符串值都将具有相同的长度,并且字母排序将是正确的。

因为当比较字符串时,“10”< '9‘但是'09’< '10‘

为此,只需将%c更改为%m即可。参考文献

另外,COUNT也可以简化。

代码语言:javascript
运行
复制
SELECT DATE_FORMAT(sys_date, '%Y-%m') as month, COUNT(*) as Total
FROM sale
GROUP BY month
ORDER BY month

如果您希望使用'%Y-%c‘格式?

然后,您可以将年份和月份的长度包含在订单中。

代码语言:javascript
运行
复制
SELECT DATE_FORMAT(sys_date, '%Y-%c') as month, COUNT(*) as Total
FROM sale
GROUP BY YEAR(sys_date), month
ORDER BY YEAR(sys_date), LENGTH(month), month
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/52242875

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档