在Oracle中按instr排序

时间:2015-04-01 09:45:59

标签: sql oracle db2 sql-order-by

我需要根据搜索条件以特定方式订购查询。我有搜索的顺序为db2工作,但我也需要让它适用于Oracle。

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

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

这将返回搜索评论:

评分, 回顾一个任务, 回顾B任务, 另一篇评论

我曾尝试在oracle中使用instr函数,但它没有返回我所希望的。

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

关于我需要做什么来获取我正在寻找的订单的任何想法?

1 个答案:

答案 0 :(得分: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
相关问题