私たちの現在のアプリケーションでは、NLSSORT=generic_m_ai によってデータをフィルター処理することができます。それによってもグループ化できるようにしたいと考えています。現在、小さなテーブルでテストしていますが、「case」ステートメントを実際のクエリと同様に維持しています
これが私のテーブルの作成方法です:
create table alex_collate_test
(aaa varchar(30),
bbb varchar(30), primary key(aaa, bbb))
insert into alex_collate_test values ('hi', 'bye')
insert into alex_collate_test values ('HI', 'bye')
insert into alex_collate_test values ('hi', 'BYE')
insert into alex_collate_test values ('HI', 'BYE')
insert into alex_collate_test values ('next', 'howdy')
通常のグループは次のとおりです。
select case when aaa is null or length(aaa) = 0 then '(blank) - '|| case when bbb is null then '' else bbb end else aaa||' - '|| case when bbb is null then '' else bbb end end mycolumn
from alex_collate_test
group by case when aaa is null or length(aaa) = 0 then '(blank) - '|| case when bbb is null then '' else bbb end else aaa||' - '|| case when bbb is null then '' else bbb end end
そして得る:
hi - BYE
HI - BYE
hi - bye
next - howdy
HI - bye
MSSQL の「Collate」コードに従い、列を「NLSSORT」でラップしています。
select NLSSORT(case when aaa is null or length(aaa) = 0 then '(blank) - '|| case when bbb is null then '' else bbb end else aaa||' - '|| case when bbb is null then '' else bbb end end, 'NLS_SORT=generic_m_ai') mycolumn
from alex_collate_test
group by NLSSORT(case when aaa is null or length(aaa) = 0 then '(blank) - '|| case when bbb is null then '' else bbb end else aaa||' - '|| case when bbb is null then '' else bbb end end , 'NLS_SORT=generic_m_ai')
そして、この出力を取得します:
0213021B01EF026701FE
023201FE0266025502130238026401F70267
最初は 16 進数のように見えますが、varchar に変換するだけですが、よく見ると 16 進数ではありません。'02' があります。これは、'hi' や 'bye' などの通常の文字ではありません。
私の予想される出力、またはむしろ私が取得したいのはこれです:
HI - BYE
next - howdy