我正在尝试编写一个Oracle查询,以与MS SQL Server相同的方式对结果进行排序。我正在玩'NLSSORT'函数及其参数,但我得不到与MS SQL Server可以看到的完全相同的结果。
上下文是一个支持Oracle和MS SQL Server的通用数据收集系统。这是一个非常古老的系统,仍在维护和开发中。没有实体框架或任何最近处理数据库交互的方法。
通过MS SQL Server上的简单排序,我得到了这个结果:
_TEST
04-00031-IPE
04-00044-OG
0A-A
A0-A
SAZ2217
Oracle上的相同查询返回:
04-00031-IPE
04-00044-OG
0A-A
A0-A
SAZ2217
_TEST
我尝试过很多NLSSORT参数组合而没有任何成功。
[编辑]
通过使用'PUNCTUATION'NLS_SORT参数值,我得到的结果非常接近MS SQL排序,但是仍然存在包含数字字符序列的子字符串的差异。以下是一个示例查询结果:
甲骨文
0031 - 蓖麻BLOC1-AV-AP
0031-CASTOR-BLOC1-AV-SP
0031 - 蓖麻BLOC1-SV-AP
0031-CASTOR-BLOC1-SV-SP
0031 - 蓖麻BLOC10-DV-AP
0031-CASTOR-BLOC10-DV-SP
0031-CASTOR-BLOC2-DV-AP
SQL女士
0031 - 蓖麻BLOC10-DV-AP
0031-CASTOR-BLOC10-DV-SP
0031 - 蓖麻BLOC1-AV-AP
0031-CASTOR-BLOC1-AV-SP
0031 - 蓖麻BLOC1-SV-AP
0031-CASTOR-BLOC1-SV-SP
0031-CASTOR-BLOC2-DV-AP
感谢您的帮助!
答案 0 :(得分:2)
我终于找到了这个解决方案:
订购NLSSORT(COLUMN_NAME,'NLS_SORT = FRENCH_M')
至少在我的特定上下文中,我在MS SQL Server(默认排序)和Oracle下都得到相同的排序。
以下是两个有用的链接:
http://www.myoracleguide.com/xl/Linguistic_Sorting_Frequently_Asked_Questions.htm
http://download.oracle.com/docs/cd/B19306_01/server.102/b14225/ch5lingsort.htm#NLSPG005
答案 1 :(得分:0)
可以考虑使用rpad功能吗?
e.g。
select name, rpad(upper(replace(translate(name,'_','+'),'-','') ),15,'0') as v1
from sorttest order by
rpad(upper(replace(translate(name,'_','+'),'-','') ),15,'0')