我正在从Oracle 12c数据库查询,我需要过滤掉日语中的值,因为接收这些值的Java应用程序当前无法显示日语字符。对于快速演示,我们有什么方法可以避免结果中的日语字符串?
答案 0 :(得分:0)
我没有改变NLS_LANG格式以正确插入日文字符。使用regexp_like,您可以过滤没有字母数字数据的记录。
create table table1 (name varchar2(100));
insert into table1 (name) values ('ABC');
insert into table1 (name) values ('DEF');
insert into table1 (name) values ('GHI');
insert into table1 (name) values ('JKL');
insert into table1 (name) values ('GHI');
insert into table1 (name) values ('昨夜のコンサ');
insert into table1 (name) values ('昨夜のABC');
select * from table1;
select * from table1 where regexp_like (name,'^[0-9a-zA-Z]+$');
select nvl(regexp_replace(name,'[^0-9a-zA-Z'']',''),'blank') from table1;
答案 1 :(得分:0)
对于select语句中的所有列,您需要将所有非英语字符替换为NULL。
select regexp_replace (column_name,'[^\x80-\xFF]',NULL) from table_name;
这会将任何非英文字符的内容替换为NULL
答案 2 :(得分:0)
鉴于the unicode ranges for Japanese characters,您只需替换日语字符:
SELECT REGEXP_REPLACE(
your_column,
UNISTR( '[\3000-\303f\3040-\309f\30a0-\30ff\ff00-\ffef\4e00-\9faf]' ),
NULL
)
FROM your_table
或忽略这些行:
SELECT *
FROM your_table
WHERE NOT REGEXP_LIKE(
your_column,
UNISTR( '[\3000-\303f\3040-\309f\30a0-\30ff\ff00-\ffef\4e00-\9faf]' )
)