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

问题描述 投票:0回答:3

我正在尝试使用简单的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的相同行为?我也开始想知道还有什么我要小心的。

sql sorting db2 db2-luw
3个回答
0
投票

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

0
投票

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

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


0
投票

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

order by upper(ThirdPartyName)
© www.soinside.com 2019 - 2024. All rights reserved.