在ASC中对DATE_FORMAT'%Y-%c'进行排序

时间:2018-09-09 08:52:14

标签: mysql datetime sql-order-by

我有查询

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

返回以下结果,

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

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

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和网站上列出的许多其他选项。但是似乎没有任何作用。

2 个答案:

答案 0 :(得分:1)

这是因为计算的import {Dimensions} from 'react-native'; const {width, height} = Dimensions.get('window') main: { flexDirection: 'row', flexWrap: 'wrap', borderRadius: 4, borderWidth: 1, borderColor: '#d6d7da', }, child: { margin: 5, borderWidth:1, borderColor:'blue', width: width / 4 - 12, // ... DeviceWidth / 4 - (marginLeft + marginRight + borderLeft + borderRight) height: 50, backgroundColor: 'gray' } 按字母顺序排序。但是您可以保留该month并简单地将其更改为前0个月小于10的格式。
这样,字符串值都将具有相同的长度,并且字母排序将是正确的。

因为在比较字符串时,然后是'10'<'9'但是'09'<'10'

为此,只需将ORDER BY month更改为%cReference

此外,%m可以简化。

COUNT

如果您希望使用'%Y-%c'格式?
然后,您可以在ORDER BY中包括年份和月份的长度。

SELECT DATE_FORMAT(sys_date, '%Y-%m') as month, COUNT(*) as Total
FROM sale
GROUP BY month
ORDER BY month

答案 1 :(得分:0)

直接根据从sys_date获得的YEARMONTH对数据进行排序。由于已启用only_full_group_by模式,因此需要在YEAR部分中获取MONTHSELECT值,以便ORDER BY子句可以将其用于排序。使用以下查询:

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