DB2 order by子句在不同的OS上给出了不同的结果

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了DB2 order by子句在不同的OS上给出了不同的结果相关的知识,希望对你有一定的参考价值。

我正在尝试使用简单的SQL来使用DB2中的order by子句对varchar列进行排序。

查询类似于:

select * from ThirdParty ThirdPartyKy > 10001 order by ThirdPartyName

我为ThirdPartyName列提供的示例数据是(不一定是相同的顺序):

ThirdPartyName:

'AA'
'bb'
'CC'
'BB'
'aa'
'cc'

我正在使用SQuirrel针对DB2 10.5 FP8的本地Windows安装执行此查询,并针对AIX上的服务器安装(相同版本)执行此查询。我在这两个上获得了不同的SQL输出。

DB2上的输出 - Windows

'aa'
'AA'
'bb'
'BB'
'cc'
'CC'

DB2上的输出 - AIX

'AA'
'BB'
'CC'
'aa'
'bb'
'cc'

现在,我知道使用'upper(thirdpartyname)'将给出我想要的结果,即字符串首先是特殊字符,数字然后不区分大小写的字符串排序。我无法理解为什么行为会有所不同?有没有人观察过DB2的相同行为?我也开始想知道还有什么我要小心的。

答案

Db2和大多数其他数据库系统中字符串的排序顺序取决于数据库系统和数据库(有时是表和列)的设置。

我的猜测是你的设置不同。数据库是否具有相同的代码页?他们有相同的语言吗?相同的整理顺序?

这是字符串比较规则的链接。他们确定排序顺序:https://www.ibm.com/support/knowledgecenter/en/SSEPGG_10.1.0/com.ibm.db2.luw.sql.ref.doc/doc/r0008479.html

请尝试以下方法获取数据库详细信息

get db cfg
另一答案

谢谢大家的答案。我发现了两个数据库之间的区别。

Windows副本具有以下整理顺序:数据库整理顺序= SYSTEM_1252

虽然AIX副本具有以下内容:数据库整理顺序= IDENTITY

相关文章:https://www.ibm.com/support/knowledgecenter/en/SSEPGG_10.1.0/com.ibm.db2.luw.admin.nls.doc/doc/c0006812.htmlhttps://www.ibm.com/support/knowledgecenter/SSEPGG_10.1.0/com.ibm.db2.luw.admin.nls.doc/doc/c0006813.html

另一答案

这是你的不同系统上安装的整理问题。解决方案是在安装时采取相同的注释或纠正您的查询,如下所示:

order by upper(ThirdPartyName)

以上是关于DB2 order by子句在不同的OS上给出了不同的结果的主要内容,如果未能解决你的问题,请参考以下文章

在外语字段上使用 ORDER BY 子句

Sql order by 和 group BY 如何共同运用?

在 mysql 中使用 union 和 order by 子句

使用具有不同 order by 子句的 postgres 窗口函数

我们如何在具有GROUP BY子句的查询中选择非聚合列,而GROUP BY子句在功能上不依赖于GROUP BY子句中的列?

SQL ORDER 结果 BY 多个子句