2015-04-01 85 views
1

我需要根据搜索条件以特定方式排序查询。我有为db2工作的搜索顺序,但我也需要为Oracle工作。在Oracle中按instr排序

我对db2的查询使用了locate函数。

Select * 
from  <table> 
where UPPER(NAME) like "'%<search>%' 
order by locate('<search>', UPPER(NAME)), 
     UPPER(NAME) 

这将返回作为搜索的观点:

评论, 审查任务, 评论B任务, 另一个评论

我曾尝试使用InStr函数在Oracle但它没有回报我所希望的。

select * 
from  <table> 
where UPPER(name) like '%<search>%' 
order by instr('<search>',UPPER(name)), 
     name 

关于我需要做什么才能获得我要找的订单?

回答

3

你在instr中的参数是错误的。您目前正在寻找搜索词内的UPPER(nane)模式。以下作品适合我:

with sample_data as (select 'Review' name from dual union all 
        select 'Review A Task' name from dual union all 
        select 'Review B Task' name from dual union all 
        select 'Another Review' name from dual) 
select * 
from  sample_data 
where UPPER(name) like '%REVIEW%' 
order by instr(UPPER(name), 'REVIEW'), 
     name; 

NAME   
-------------- 
Review   
Review A Task 
Review B Task 
Another Review 
+0

感谢您的帮助!我应该仔细看看这个功能。 – Hugs 2015-04-01 10:16:58