搜索关键字,按空格分开,结果要按精确度从高到低显示,比如:查找的关键字---> ASP JAVA PHP FLEX数据库记录集--->
ID CONTENT
1 JAVA是面对对象的语言2 PHP学起来比JAVA要容易点3 ASP比PHP用起来简单,PHP比JAVA用起来简单4 FLEX做出来的界面好漂亮,而且可以和ASP,PHP,JAVA结合使用5 ASP,PHP用来做网页都不错那么搜索的结果排序应该是ID
4 -->出现了4个关键字3 -->出现了3个关键字2 -->出现了2个关键字5 -->出现了2个关键字1 -->出现了1个关键字
方法:
with a as(
select 1 id,'JAVA是面对对象的语言' content from dual
union all
select 2 id,'PHP学起来比JAVA要容易点 ' content from dual
union all
select 3 id,'ASP比PHP用起来简单,PHP比JAVA用起来简单' content from dual
union all
select 4 id,'FLEX做出来的界面好漂亮,而且可以和ASP,PHP,JAVA结合使用' content from dual
union all
select 5 id,'ASP,PHP用来做网页都不错' content from dual
),
b as(--这个b表就是存放关键字的表
select 'JAVA' content from dual union all
select 'PHP' from dual union all
select 'ASP' from dual union all
select 'FLEX' from dual)
select id || '-->' || '出现了' ||cnt||'个关键字' name
from(select id,sum((case when instr(a.content,b.content)>0 then 1 else 0 end)) cnt
from a,b
group by a.id)
order by cnt desc;
NAME
--------------------------------------------------------------------------------
4-->出现了4个关键字
3-->出现了3个关键字
2-->出现了2个关键字
5-->出现了2个关键字
1-->出现了1个关键字
提供个类似分割关键字 存储到表中的函数
函数的功能将传入的字符串(a,bdc,fde,23,rd,sasp)拆分放到一个表a里
create or replace procedure testpro(v_str varchar2)
as
sqlstr varchar2(4000 );
v_sqlstr varchar2(4000 );
begin
v_sqlstr:=','||v_str||',';
sqlstr:='insert into a
select
substr('''||v_sqlstr||''',instr('''||v_sqlstr||''','','',1,rownum)+1,
instr('''||v_sqlstr||''','','',1,rownum+1)-
instr('''||v_sqlstr||''','','',1,rownum)-1) newid
from dual
connect by rownum <= length('''||v_sqlstr||''')
- length(replace('''||v_sqlstr||''', '','', ''''))-1';
execute immediate sqlstr;
--dbms_output.put_line(sqlstr);
end;