Oracle数据库按波兰语字符排序

时间:2013-01-02 18:47:48

标签: oracle oracle11g sql-order-by

我有问题,通过包含波兰字符的varchar对元素进行排序,例如±,Ą。

例如,我们有以下名称:

Aaaa
BBcvx
Ąccc
Ddde
ądcc

以下查询:

select * from something order by lower(name);

返回结果:

Aaaa
BBcvx
Ddde
ądcc
Ąccc

正如您所看到的,抛光字符被忽略并放在最后。它应该是:

Aaaa
ądcc
Ąccc
BBcvx
Ddde

可能是什么问题?数据库编码?我的是:

SELECT * FROM NLS_DATABASE_PARAMETERS WHERE PARAMETER = 'NLS_CHARACTERSET';

Result:
EE8MSWIN1250

可以在不更改数据库编码的情况下修复此问题吗?

1 个答案:

答案 0 :(得分:5)

您需要查看NLS_SORT参数,特别是linguistic sorting。您可以使用此参数指定language you'd like to sort by。我怀疑你的情况是POLISH

像这样的东西

select *
  from something
 order by nls_lower(name, 'NLS_SORT' = 'POLISH')

NLS_LOWER()以与普通LOWER()相同的方式返回小写字符。

您也可以在会话级别执行此操作,这会在会话期间更改默认排序参数。

alter session set nls_sort = POLISH;

如果你想总是使用这种类型;这是在创建数据库时完成的数据库级别。