NLSSORT就像操作不适用于单字符通配符

时间:2013-09-11 15:45:30

标签: oracle oracle11g

我正在尝试使用单字符通配符使用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')

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

2 个答案:

答案 0 :(得分:1)

我不确定你的期望。也许如果你告诉我们你想要实现的目标,我们可以提供帮助。现在,你似乎错误地使用了错误的功能。

NLSSORT应该专门用于排序,即ORDER BY子句中的i-e。它返回的RAW(二进制)数据与VARCHAR2不能很好地匹配。当您连接rawvarchar2时,raw将转换为其十六进制值,整个字符串将作为varchar2进行跟踪。

在应用NLSSORT时,“test”和“fast”会有相同的结尾,但我不知道如何确定每个字符将被转换为的字节数。

答案 1 :(得分:0)

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

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