为提高效率,提问时请提供以下信息,问题描述清晰可优先响应。
【DM版本】:DM8
【操作系统】:window10
【CPU】:
【问题描述】*:
按中文首字母排序,值是数字或者特殊符号排序不正确
请看sql:
SELECT * from t_tab
order by NLSSORT(input_yznacx,'NLS_SORT = SCHINESE_PINYIN_M')
结果:
对 input_yznacx字段进行 中文拼音排序,中文是正确的,但是字段里面如果有特殊符号,或者数字 排序就不对了,毫无规律,这个要如何处理;
这个感觉是达梦在转拼音排序规则时,对部分字符没有给出默认值引起的,可以用下面这个SQL查各ascii字符对应的排序编号
SELECT CHR(31 + LEVEL) AS CH ,NLSSORT(CHR(31 + LEVEL)) AS NLS_DEFAULT ,NLSSORT(CHR(31 + LEVEL) ,'NLS_SORT = BINARY') AS NLS_BINARY ,NLSSORT(CHR(31 + LEVEL) ,'NLS_SORT = SCHINESE_PINYIN_M') AS NLS_PINYIN ,NLSSORT(CHR(31 + LEVEL) ,'NLS_SORT = SCHINESE_STROKE_M') AS NLS_STROKE ,NLSSORT(CHR(31 + LEVEL) ,'NLS_SORT = SCHINESE_RADICAL_M') AS NLS_RADICAL FROM DUAL CONNECT BY LEVEL <= 95
查询结果类似下面图里的样子


能看出其中很多字符没有配置拼音排序的编码值,而改SQL在Oracle中查,这些字符是有拼音排序值的
因为在DM里部分字符没有拼音排序号,这样这些字符出现在字符串中,且该字符串要按拼音排序时,生成的排序串就会出问题,下面图里是我测试的情况

从图里能发现因为减号‘-’没有拼音编码,造成-100 和 100拼接的排序串是相同的这样就出现顺序混乱的情况了