如何在oracle中替换varchar2列中重音字母

weylhg0b  于 2023-05-22  发布在  Oracle
关注(0)|答案(5)|浏览(144)

我有一个名为NAME_USER的varchar2列。例如,数据是:JUAN ROMÄN但是我试着向JUAN ROMAN展示,在我的语句结果中将A替换为A。我该怎么做?先谢谢你了。

8oomwypt

8oomwypt1#

使用带有适当字符集的convert函数

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
vtwuwzda

vtwuwzda2#

您可以使用replaceregexp_replacetranslate,但它们都要求您将所有可能的重音字符Map到它们的非重音版本。
另外,还有一个名为nlssort()的函数,它通常用于覆盖order by子句使用的默认语言设置。它有一个不区分重音的排序选项,可以创造性地滥用它来解决问题。nlssort()返回一个二进制,所以你必须使用utl_raw.cast_to_varchar2()转换回varchar 2:

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://community.oracle.com/thread/1117030
ETA:nlssort()不能在不区分大小写的情况下实现重音不敏感,因此该解决方案将始终转换为小写。将上面的表达式包含在upper()中,当然会将您的示例值返回到“JUAN ROMAN”。如果你的值可以混合大小写,并且你需要保留每个字符的大小写,而initcap()不够灵活,那么你需要编写一些PL/SQL。

ghhaqwfi

ghhaqwfi3#

可以使用正则表达式:

SELECT regexp_replace('JUAN ROMÄNí','[[=A=]]+','A' )
FROM dual;
vzgqcmou

vzgqcmou4#

select replace('JUAN ROMÄN','Ä','A')
from dual;

如果你有更多的Map要做,你可以使用TRANSLATE ...

uujelgoq

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 ;

相关问题