Oracle中对数字加汉字的排序(再完善)

问题是随着需求的变化逐步发现并解决的,之前写过oracle中对数字加汉字的排序以及REGEXP_SUBSTR介绍和Oracle中对数字加汉字的排序(完善), 这次数据又不一样了
第一次是数字在前汉字在后且数字没有重复,如下
在这里插入图片描述

第二次是数字有重复,且数字前后内容相同,如下
Oracle中对数字加汉字的排序(再完善)_第1张图片

这次和第二次唯一不同的是数字后面内容是不同的,如下:
Oracle中对数字加汉字的排序(再完善)_第2张图片

第一种排序:

SELECT * FROM test2 order by name;

Oracle中对数字加汉字的排序(再完善)_第3张图片

第二种排序:

SELECT * FROM test2 order by cast(REGEXP_SUBSTR(name, '[0-9]+') as int);

Oracle中对数字加汉字的排序(再完善)_第4张图片
仅对数字进行排序,不符合需求


第三种排序:

SELECT * FROM test2 
order by REGEXP_SUBSTR(name, '[[:alpha:]]+'), --汉字排序(只对数字的前半部分)
cast(REGEXP_SUBSTR(name, '[0-9]+') as int) --数字排序

Oracle中对数字加汉字的排序(再完善)_第5张图片

继续优化:

SELECT * FROM test2 order by REGEXP_REPLACE(name,'[0-9]+',''), --汉字排序(替换数字,留下全部汉字)
cast(REGEXP_SUBSTR(name, '+[0-9]+') as int) --数字排序

Oracle中对数字加汉字的排序(再完善)_第6张图片

作者:itmyhome

你可能感兴趣的:(Oracle)