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

时间:2018-03-02 13:29:44

标签: sql sorting db2 db2-luw

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

3 个答案:

答案 0 :(得分: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

答案 1 :(得分: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

答案 2 :(得分:0)

这是您的不同系统上安装的排序规则问题。解决方案是在安装时采取相同的衔接或纠正您的查询:

order by upper(ThirdPartyName)