0

我正在尝试使 NLSSORT 与单字符通配符一起使用。

create table alex_test(col1 varchar2(20))
insert into alex_test values('test')
insert into alex_test values('fast')    
select col1 from alex_test where col1 like '__st'
select col1 from alex_test where col1 like '__' || 'st'

上面的语句插入了'test'和'fast',两个select语句都返回了两行。

select col1 from alex_test where NLSSORT(col1, 'NLS_SORT=generic_m_ai') like '%' || NLSSORT('st', 'NLS_SORT=generic_m_ai')

上面的语句也返回两行。

但是,这两个语句不返回行:

select col1 from alex_test where NLSSORT(col1, 'NLS_SORT=generic_m_ai') like '__' || NLSSORT('st', 'NLS_SORT=generic_m_ai')
select col1 from alex_test where NLSSORT(col1, 'NLS_SORT=generic_m_ai') like NLSSORT('__st', 'NLS_SORT=generic_m_ai')

有没有办法让它以某种方式工作?用 '%' 匹配多个字符似乎很奇怪,但用 '_' 匹配单个字符不起作用。

4

2 回答 2

1

我不确定你期望什么。也许如果您告诉我们您正在努力实现的目标,我们可以提供帮助。现在,您似乎在错误的工作中使用了错误的功能。

NLSSORT应该专门用于排序,即在ORDER BY子句中。它返回RAW的(二进制)数据不能很好地与VARCHAR2. 当您连接 araw和 avarchar2时,原始数据将转换为其十六进制值,并且整个字符串将被标记为 a varchar2

碰巧“测试”和“快速”在应用时具有相同的结尾NLSSORT,但我不知道您如何确定每个字符将转换为的字节数。

于 2013-09-11T15:55:11.543 回答
0

现在您已经将字节表示为字符串,您可以使用 8 个下划线而不是 2 个(取决于语言)。

@Vincent,我认为您将 NLSSORT 与参数 NLS_SORT 混淆了。

于 2013-09-11T16:25:40.260 回答