我们当前的应用程序允许通过 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 的“整理”代码,并将列包装在“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
起初它看起来像十六进制,我只需要转换为 varchar,但如果你仔细观察,它不是十六进制。它有 '02' - 这不是像 'hi' 或 'bye' 这样的普通字符。
我的预期输出,或者更确切地说我想要得到的是:
HI - BYE
next - howdy