我正在尝试使用单字符通配符使用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')
有没有办法让它以某种方式运作?使用'%'匹配多个字符似乎很奇怪,但是将单个字符与'_'匹配不起作用。
答案 0 :(得分:1)
我不确定你的期望。也许如果你告诉我们你想要实现的目标,我们可以提供帮助。现在,你似乎错误地使用了错误的功能。
NLSSORT
应该专门用于排序,即ORDER BY
子句中的i-e。它返回的RAW
(二进制)数据与VARCHAR2
不能很好地匹配。当您连接raw
和varchar2
时,raw将转换为其十六进制值,整个字符串将作为varchar2
进行跟踪。
在应用NLSSORT
时,“test”和“fast”会有相同的结尾,但我不知道如何确定每个字符将被转换为的字节数。
答案 1 :(得分:0)
现在你有字节表示为字符串,你可以使用8个下划线而不是2个(取决于语言)。
@Vincent,我认为你将NLSSORT与参数NLS_SORT混淆。