如何使Oracle的命令'像SQLServer一样?

时间:2011-05-18 14:13:46

标签: oracle sorting

我正在尝试编写一个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

感谢您的帮助!

2 个答案:

答案 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')