问题是随着需求的变化逐步发现并解决的,之前写过oracle中对数字加汉字的排序以及REGEXP_SUBSTR介绍和Oracle中对数字加汉字的排序(完善), 这次数据又不一样了
第一次是数字在前汉字在后且数字没有重复,如下
第二次是数字有重复,且数字前后内容相同,如下
这次和第二次唯一不同的是数字后面内容是不同的,如下:
第一种排序:
SELECT * FROM test2 order by name;
第二种排序:
SELECT * FROM test2 order by cast(REGEXP_SUBSTR(name, '[0-9]+') as int);
仅对数字进行排序,不符合需求
第三种排序:
SELECT * FROM test2
order by REGEXP_SUBSTR(name, '[[:alpha:]]+'), --汉字排序(只对数字的前半部分)
cast(REGEXP_SUBSTR(name, '[0-9]+') as int) --数字排序
继续优化:
SELECT * FROM test2 order by REGEXP_REPLACE(name,'[0-9]+',''), --汉字排序(替换数字,留下全部汉字)
cast(REGEXP_SUBSTR(name, '+[0-9]+') as int) --数字排序
原创文章,作者:ItWorker,如若转载,请注明出处:https://blog.ytso.com/tech/database/4114.html