MySQL中如何对VARCHAR字段的字母数字值进行升序降序排序?
解决自定义字母数字字符串排序问题
看起来你要的排序规则其实是把每个字符串反转后按常规字典序升序排列,这样得到的结果正好和你给出的期望升序完全匹配!我们来验证一下:比如把AOP15反转成51POA,TEST15反转成51TSET,按反转后的字符串升序排,这两个会排在一起,接下来是AOP89反转后的98POA,以此类推,完全符合你给出的升序列表。
针对主流数据库的实现方案
假设你的字段名为your_column,表名为your_table:
升序排序(匹配你的期望结果)
SELECT your_column FROM your_table ORDER BY REVERSE(your_column) ASC;
降序排序(匹配你的期望结果)
SELECT your_column FROM your_table ORDER BY REVERSE(your_column) DESC;
验证逻辑对应你的测试数据
把每个字符串反转后按字典序排序:
AOP15→51POATEST15→51TSETAOP89→98POATEST5→5TSETDoc2→2coDTASK56→65KSATSOP1→1POSTASK6→6KSATSOP2→2POSSOP158→851POSSOP8→8POSSOP100→001POSSOP90→09POS
按反转后的字符串升序排列,正好得到你要的升序结果;降序就是反转这个排序顺序,和你给出的降序结果完全一致。
如果使用的是Oracle 11g及更早版本(不支持REVERSE函数),可以用自定义字符串反转逻辑实现,比如通过递归或SUBSTR拼接的方式,但12c及以上版本直接使用REVERSE即可。
内容的提问来源于stack exchange,提问作者user5044085
相关产品推荐
相关产品推荐

