搜索不是英文文本的数据

时间:2018-12-26 08:06:41

标签: sql database oracle

简而言之:我必须能够在Oracle DB内的某一列内搜索所有非英语文本或包含-^等符号的事件。 (大写和非大写都可以) 一般来说,我希望找到所有出现的其他语言,例如韩语西班牙语等。

ID    NAME      DATE
1     TEST      2018-12-02 11:09:05
2     TE-ST     2018-12-02 11:09:05
3     测试       2018-12-02 11:09:05

我希望查询仅找到第3行。

3 个答案:

答案 0 :(得分:3)

with test as
(
select 'hello good morning' txt from dual 
union select 'Bad weather' from dual
union select '测试 ' from dual
    union select 'L''Inhêrit ' from dual
    union select 'هلا' from dual
)
select *
from test
where txt != asciistr( txt )

答案 1 :(得分:1)

查找非英文字符非常简单。 @moudiz的solution will solve that problem。但是,要确定文本正文是用英语还是其他某种语言编写,则需要某种形式的AI / ML功能,这在Oracle RDBMS中不是标准的。

一种可能是Oracle Text。 World Lexer具有对多种语言的自动检测支持。也许有可能会纠缠其判断某段文字是否为英语的能力。 Find out more。 (注意:蓝天在这里思考,从未尝试过类似的方法。)

另一种解决方案是构建一个调用Google Translate API的PL / SQL程序包。 detect()可以识别所传递文本的语言。 Find out more

有两个明显的障碍:

  1. 许多组织都会反对将文本从数据库传递到外部网站(例如Google)。
  2. 如果您有大量数据要进行测试,则许可费用会很高。

答案 2 :(得分:0)

由于@moudiz,我能够找到一个完美的解决方案。 我正在使用:

select * from table 
where not  REGEXP_LIKE (field_name, '^[^0-9a-z]+$', 'i');