2014-10-10 216 views
-1

我有一个DB2数据库,我试图按字母顺序排序。是,DB2似乎问题并不在排序过程中要考虑的= A,因此,我得到的结果是这样的:DB2 - 按字母顺序排序

ABCT ABCG

我想:

A AB BC CG牛逼

我不知道需要做什么特别的事情?

在SQL中,我们有COLLATE NOCASE ASC。任何人都可以告诉我什么是在db2中的替代方案。

+1

不熟悉DB2,但在Oracle SQL中,我会按照上层(CITY_NAME)的城市顺序执行select *操作;其中upper是将所有小写字符转换为大写字母的内部函数。既然它只是按顺序而已,它不会影响返回的内容。 – 2014-10-10 11:34:39

+0

'在** SQL **中,我们有COLLATE NOCASE ASC.'您是否使用SQL来访问您的DB2数据库?什么是DB2版本?它安装了什么平台? – user2338816 2014-10-10 11:49:46

+0

不是我使用SQL。而是我正在使用DB2 9.5 – 2014-10-10 12:01:59

回答

0

如果这是一次性问题(即只有一个查询),那么@Paul Stearns建议的解决方案(使用UPPER())将起作用。

但是,如果这是一个会影响应用程序中所有查询的问题,则应考虑适当的collating sequence应该适用于您的数据库。默认的整理顺序基于代码点进行排序,这就是为什么您会看到您看到的排序顺序。

不幸的是,您无法更改数据库的整理顺序;它在创建数据库时设置。因此,一旦确定了正确的排序顺序,您需要创建一个新的数据库,并将现有数据库中的数据复制到新的数据库中。

这样做可能会很痛苦(尤其是如果你有一个非常大的数据库),但它会为你节省很多麻烦(以及在很多时候依赖于UPPER()会产生性能问题) 。

+0

谢谢伊恩。它已经解决了我的问题:) – 2014-10-11 13:42:14

+0

如果是这样,请接受答案。 – 2014-10-14 22:41:58