维护一个旧的系统,表设计中只有编码,而没有其他排序相关的字段,然后根据编码排序出现了顺序错乱的问题。
具体的解决方案,就是使用PL/SQL写一个自定义函数,用来将使用点分隔符的编码转成层级码格式的编码,比如1.1.1.1转成001001001。
RETURN VAR_ZERO_CODE;
END;
创建完自定义函数之后,就可以拿来使用了(我这里定义的是10位的层级码)。
SELECT POINT_CODE_INTO_ZARO_CODE('1.2.3') CODE FROM DUAL; -- 000000000100000000020000000003
SELECT POINT_CODE_INTO_ZARO_CODE('110') CODE FROM DUAL; -- 0000000110
这样,在排序的时候在ORDER BY子句中加上转换后的编码,就可以实现正常排序了。