如何按数字最后3位以每10个为一组的规则排序查询结果?
实现按数字最后三位的个位分组排序的方法
你要的排序逻辑是先把最后三位个位相同的数字归为一组(个位0的排最前,接着个位1,再个位2……),组内再按最后三位的数值从小到大排列。
你原来的SQL有两个问题:
- 括号位置错误:
cast(right(column name, 3) as int / 10)里的int /10写法错误,应该先把right(column name,3)转成int,再除以10,也就是cast(right(column name, 3) as int) / 10 - 逻辑不对:你原来的排序是取最后三位的整十位(比如010转成10,001转成0),这会把000、001这类整十位相同的数字排在一起,不符合你要的个位分组需求。
正确的排序语句应该这样写:
ORDER BY -- 按最后三位的个位数字升序,将同个位的数字归为一组 RIGHT(你的列名, 1), -- 同组内按最后三位的数值从小到大排序 CAST(RIGHT(你的列名, 3) AS INT)
如果你的数据库支持取模运算,也可以用取模的方式获取个位数字,效果一致:
ORDER BY CAST(RIGHT(你的列名, 3) AS INT) % 10, CAST(RIGHT(你的列名, 3) AS INT)
这样就能得到你预期的000, 010, 020, 030, 050, 060, 070, 080, 090, 001, 011...这类排序结果了。
内容的提问来源于stack exchange,提问作者Toffeehammer
相关产品推荐
相关产品推荐

