当尝试使用此stackoverflow回答中描述的技术从Oracle中的字符串中删除所有重音符号时:how replace accented letter in a varchar2 column in oracle我得到混合结果。
select CONVERT('JUAN ROMÄN', 'US7ASCII') from dual;
返回原始字符串,但用问号替换字符,例如ñ(可能是因为选择了字符集-使用不同的字符集进行测试会导致不同的结果)。
使用以下技术:
select utl_raw.cast_to_varchar2(nlssort(NAME_USER, 'nls_sort=binary_ai')) from YOUR_TABLE;
返回完整的字符串,但也在字符串的末尾放置NUL值。
是否有一个字符集,我可以使用西班牙口音,以获得正确的结果(原始字符串与不同的口音删除);有没有办法避免utl_raw.cast_to_varchar2技术中的NUL值?
根据注解,replace char(0)似乎删除了NUL值。举个例子
select
upper(utl_raw.cast_to_varchar2((nlssort('this is áà ñew test','nls_sort=binary_ai')))) as test,
replace(upper(utl_raw.cast_to_varchar2((nlssort('this is áà ñew test','nls_sort=binary_ai')))),chr(0),'') as test2
from dual;
如果可能的话,我会有一个更“直接/更简单”的解决方案。
2条答案
按热度按时间u0sqgete1#
您可以使用
TRANSLATE(your_string, from_chars, to_chars)
https://docs.oracle.com/cd/B19306_01/server.102/b14200/functions196.htm只需将所有带有重音符号的字符放在
from_chars
字符串中,并将其相应的替换字符放在to_chars
中。7z5jn7bk2#
我在下面的页面上找到了这个:https://blogs.oracle.com/sql/post/how-to-do-case-insensitive-and-accent-insensitive-search-in-oracle-database
使用排序
binary_ai
,过滤器没有大写和小写,还有口音,我希望你能提供另一个例子: