我正在DB2中尝试使用一个简单的SQL来使用orderby子句对varchar列进行排序。
查询类似于:
select * from ThirdParty where ThirdPartyKy > 10001 order by ThirdPartyName
我为ThirdPartyName列提供的示例数据是(顺序不一定相同):
第三方名称:
'AA'
'bb'
'CC'
'BB'
'aa'
'cc'
我使用SQuirrel对DB2 10.5 FP 8的本地Windows安装和AIX(相同版本)上的服务器安装执行了这个查询。
DB2 - Windows上的输出
'aa'
'AA'
'bb'
'BB'
'cc'
'CC'
DB2 - AIX上的输出
'AA'
'BB'
'CC'
'aa'
'bb'
'cc'
现在,我知道使用'upper(thirdpartyname)'将给予我想要的结果,即首先是以特殊字符开头的字符串,然后是数字,最后是不区分大小写的字符串排序。我不明白为什么行为会不同?有人在DB2中观察到了同样的行为吗?我也开始想知道还有什么需要注意的。
3条答案
按热度按时间ecfdbz9o1#
Db2和大多数其他数据库系统中字符串的排序顺序取决于数据库系统和数据库(有时是表和列)的设置。
我猜是你的设置不同。数据库有相同的代码页吗?它们有相同的语言吗?相同的排序顺序吗?
以下是字符串比较规则的链接。它们确定排序顺序:https://www.ibm.com/support/knowledgecenter/en/SSEPGG_10.1.0/com.ibm.db2.luw.sql.ref.doc/doc/r0008479.html
请尝试以下操作以获取数据库详细信息:
wko9yo5t2#
谢谢大家的回答。我发现了两个数据库的区别。
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.html,https://www.ibm.com/support/knowledgecenter/SSEPGG_10.1.0/com.ibm.db2.luw.admin.nls.doc/doc/c0006813.html
guz6ccqo3#
这是一个在不同的系统上安装排序规则的问题。一个解决方案是在安装时采用相同的排序规则,或者像这样修改您的查询: