如何在SQL查询中过滤掉日语值?

时间:2017-04-26 10:06:39

标签: sql oracle unicode

我正在从Oracle 12c数据库查询,我需要过滤掉日语中的值,因为接收这些值的Java应用程序当前无法显示日语字符。对于快速演示,我们有什么方法可以避免结果中的日语字符串?

3 个答案:

答案 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]' )
       )