繁体   English   中英

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

[英]DB2 order by clause gives different results on different OS

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

查询类似于:

select * from ThirdParty ThirdPartyKy > 10001 order by ThirdPartyName

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

ThirdPartyName:

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

我正在对DB2 10.5 FP8的本地Windows安装和对AIX(相同版本)上的服务器安装使用SQuirrel执行此查询。 我在这两个上面都得到上述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/zh-CN/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/zh-CN/SSEPGG_10.1.0/com.ibm.db2.luw.admin.nls.doc/doc/c0006812.html,https : //www.ibm .com / support / knowledgecenter / SSEPGG_10.1.0 / com.ibm.db2.luw.admin.nls.doc / doc / c0006813.html

这是在您的differents系统上安装的排序规则的问题。 一种解决方案是在安装或纠正查询时采用相同的排序规则:

order by upper(ThirdPartyName)

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM