2

ą、Ą などのポーランド語の文字を含む 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

データベースのエンコーディングを変更せずにこれを修正できますか?

4

1 に答える 1

5

NLS_SORTパラメータ、特に言語ソートを調べる必要があります。このパラメータを使用して、並べ替える言語を指定できます。あなたの場合はPOLISH.

このようなもの

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

NLS_LOWER()通常の と同じ方法で小文字を返しますLOWER()

これをセッション レベルで行うこともできます。これにより、セッション中にデフォルトの並べ替えパラメーターが変更されます。

alter session set nls_sort = POLISH;

常にこの並べ替えを使用したい場合。これは、データベースの作成時にデータベース レベルで行われます。

于 2013-01-02T18:57:04.597 に答える