Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/sorting/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何使Oracle“order by”的行为类似于SQLServer?_Oracle_Sorting - Fatal编程技术网

如何使Oracle“order by”的行为类似于SQLServer?

如何使Oracle“order by”的行为类似于SQLServer?,oracle,sorting,Oracle,Sorting,我正在尝试编写一个Oracle查询,以与MS SQL Server相同的方式对结果进行排序。我在玩弄函数及其参数,但我无法得到与MS SQL Server完全相同的结果 上下文是支持Oracle和MS SQL Server的通用数据收集系统。这是一个相当古老的系统,仍在维护和开发中。没有实体框架或任何最近处理数据库交互的方法 通过在MS SQL Server上执行简单的订购,我得到以下结果: _试验 04-00031-IPE 04-00044-OG 0A-A A0-A SAZ2217 Oracl

我正在尝试编写一个Oracle查询,以与MS SQL Server相同的方式对结果进行排序。我在玩弄函数及其参数,但我无法得到与MS SQL Server完全相同的结果

上下文是支持Oracle和MS SQL Server的通用数据收集系统。这是一个相当古老的系统,仍在维护和开发中。没有实体框架或任何最近处理数据库交互的方法

通过在MS SQL Server上执行简单的订购,我得到以下结果:

_试验 04-00031-IPE 04-00044-OG 0A-A A0-A SAZ2217

Oracle上的同一查询返回以下结果:

04-00031-IPE 04-00044-OG 0A-A A0-A SAZ2217 _试验

我尝试了许多NLSSORT参数的组合,但没有成功

[编辑] 通过使用“标点符号”NLS_排序参数值,我得到的结果非常接近MS SQL排序,但与包含数字字符序列的子字符串仍然存在差异。以下是一个示例查询结果:

神谕 0031-CASTOR-BLOC1-AV-AP 0031-CASTOR-BLOC1-AV-SP 0031-CASTOR-BLOC1-SV-AP 0031-CASTOR-BLOC1-SV-SP 0031-CASTOR-BLOC10-DV-AP 0031-CASTOR-BLOC10-DV-SP 0031-CASTOR-BLOC2-DV-AP

Ms SQL 0031-CASTOR-BLOC10-DV-AP 0031-CASTOR-BLOC10-DV-SP 0031-CASTOR-BLOC1-AV-AP 0031-CASTOR-BLOC1-AV-SP 0031-CASTOR-BLOC1-SV-AP 0031-CASTOR-BLOC1-SV-SP 0031-CASTOR-BLOC2-DV-AP


谢谢你的帮助

我终于找到了这个解决方案:

ORDER BY NLSSORT(COLUMN_NAME, 'NLS_SORT = FRENCH_M')  
至少在我的特定上下文中,我在MS SQL Server默认排序和Oracle下得到相同的排序

以下是两个有用的链接:


可以考虑使用RPAD函数吗?

e、 g

选择名称、rpadupperreplacetranslatename、“'、“+”、“-”、15、“0”作为v1 从排序测试命令 rpadupperreplacetranslatename、''u'、'+'、'-'、15、'0'
到目前为止,您指定了哪些参数?看起来它使用的是ascii码。可能改成英语会有帮助。我想DBA可能已经禁用了英语。如果我使用:ORDER BY NLSSORTRESULTATS_DERNIER_MES.UNE_CODE_IDENT,'NLS_SORT=FRENCH'Oracle处理它,尽管我得到了错误的排序,但是如果我使用:ORDER BY NLSSORTRESULTATS_DERNIER_MES.UNE_CODE_IDENT,'NLS_SORT=ENGLISH'我会得到一个Oracle错误ora-12702。我也试过“NLS_SORT=BINARY-NLS_COMP=language”对不起,dups英语似乎被DBA禁用了,我猜。如果我使用:ORDER BY NLSSORTRESULTATS_DERNIER_MES.UNE_CODE_IDENT,'NLS_SORT=FRENCH'Oracle处理它,尽管我得到了错误的排序,但是如果我使用:ORDER BY NLSSORTRESULTATS_DERNIER_MES.UNE_CODE_IDENT,'NLS_SORT=ENGLISH'我会得到一个Oracle错误ora-12702。我也试过“NLS_SORT=二进制NLS_COMP=语言”NLS_SORT=二进制NLS_COMP=ANSI“NLS_LANGUAGE=美国”+人工智能和CI变体。你可以试试标点符号,或者西欧。我还需要完成更多的测试,但虚拟化看起来很有希望,非常感谢!另一种方法是不要尝试让Oracle和SQLServer以相同的方式排序。。。i、 e.改变算法或方法。。i、 .e创建键值的前期数组。。。或对每个Oracle源行执行SQLserver查找。。。反之亦然。。。。。等