如何编写像java split函数一样的Oracle sql?

时间:2016-06-06 18:25:22

标签: sql oracle oracle11g oracle10g

现在我想编写sql,如果我传递了像Aaron这样的关键字,那么我搜索结果:

select * from worker where name like %Aaron%

如果我传递了像Aaron Alina Wendy这样的关键字,那么我会搜索结果:

select * from worker where name like %Aaron% or name like '%Alina%' or name like '%Wendy%'

我知道必须有一种简单的方法,比如拆分功能或其他方式来获取搜索结果,而且我不需要拆分关键字来拼接sql语句,怎么做?我能做这样的工作吗? :

select * from worker where fn_getSearchCondition('Aaron Alina Wendy')

2 个答案:

答案 0 :(得分:1)

尝试:

select w.*
  from worker w
 where regexp_like(w.name,'Aaron|Alina|Wendy');

如果您的搜索条件列表是可变的,您可以使用REPLACE()函数将空格字符转换为管道分隔符以组成正则表达式:

regexp_like(w.name, replace('Aaron Alina Wendy',' ','|') )

答案 1 :(得分:0)

尝试:

SELECT w.* 
FROM worker w
JOIN table(
   DBMSOUTPUT_LINESARRAY('Aaron', 'Alina', 'Wendy')
) x
ON w.name LIKE '%'||x.column_value||'%'