select CONVERT('JUAN ROMÄN', 'US7ASCII') from dual;
下面是可以在Oracle中使用的字符集:
US7ASCII: US 7-bit ASCII character set
WE8DEC: West European 8-bit character set
WE8HP: HP West European Laserjet 8-bit character set
F7DEC: DEC French 7-bit character set
WE8EBCDIC500: IBM West European EBCDIC Code Page 500
WE8PC850: IBM PC Code Page 850
WE8ISO8859P1: ISO 8859-1 West European 8-bit character set
select utl_raw.cast_to_varchar2(nlssort(NAME_USER, 'nls_sort=binary_ai'))
from YOUR_TABLE;
对于扩展ASCII集中的重音字符列表及其派生的非重音值,请尝试以下操作:
select level+192 ascii_code,
chr(level+192) accented,
utl_raw.cast_to_varchar2(nlssort(chr(level+192),'nls_sort=binary_ai')) unaccented
from dual
connect by level <= 63
order by 1;
下午好,我在这个页面上找到了这个https://blogs.oracle.com/sql/post/how-to-do-case-insensitive-and-accent-insensitive-search-in-oracle-database select substr(athlete_name,instr(athlete_name,',')+ 2)given_names,athlete_name from olym_athlete where athlete_name like '%helene%'Collate binary_aiorder by given_names; 使用collate binary_ai,过滤器没有大小写和重音符号,我希望你能提供另一个例子 SELECT id,name,surname,salary FROM EMPLOYEES WHERE SURNAME LIKE '%PeRéZ%' Collate binary_ai ;
5条答案
按热度按时间8oomwypt1#
使用带有适当字符集的convert函数
下面是可以在Oracle中使用的字符集:
vtwuwzda2#
您可以使用
replace
、regexp_replace
或translate
,但它们都要求您将所有可能的重音字符Map到它们的非重音版本。另外,还有一个名为
nlssort()
的函数,它通常用于覆盖order by
子句使用的默认语言设置。它有一个不区分重音的排序选项,可以创造性地滥用它来解决问题。nlssort()
返回一个二进制,所以你必须使用utl_raw.cast_to_varchar2()
转换回varchar 2:对于扩展ASCII集中的重音字符列表及其派生的非重音值,请尝试以下操作:
不是我的答案-我以前用过这个,它似乎工作正常,但必须归功于这篇文章:https://community.oracle.com/thread/1117030
ETA:
nlssort()
不能在不区分大小写的情况下实现重音不敏感,因此该解决方案将始终转换为小写。将上面的表达式包含在upper()
中,当然会将您的示例值返回到“JUAN ROMAN”。如果你的值可以混合大小写,并且你需要保留每个字符的大小写,而initcap()
不够灵活,那么你需要编写一些PL/SQL。ghhaqwfi3#
可以使用正则表达式:
vzgqcmou4#
如果你有更多的Map要做,你可以使用TRANSLATE ...
uujelgoq5#
下午好,我在这个页面上找到了这个https://blogs.oracle.com/sql/post/how-to-do-case-insensitive-and-accent-insensitive-search-in-oracle-database
select substr(athlete_name,instr(athlete_name,',')+ 2)given_names,athlete_name from olym_athlete where athlete_name like '%helene%'Collate binary_aiorder by given_names;
使用collate binary_ai,过滤器没有大小写和重音符号,我希望你能提供另一个例子
SELECT id,name,surname,salary FROM EMPLOYEES WHERE SURNAME LIKE '%PeRéZ%' Collate binary_ai ;