oracle 有没有类似mysql的find_in_set功能

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了oracle 有没有类似mysql的find_in_set功能相关的知识,希望对你有一定的参考价值。

在oracle中怎样实现排序是按查询的条件来排的,以下是mysql的实现 select * from t_exam_item_info where i
在oracle中怎样实现排序是按查询的条件来排的,以下是mysql的实现
select * from t_exam_item_info where item_num in ( 'GMEXIN10484','HXEXIN10472','HXEXIN10471','GMEXIN10487','GMEXIN10483' )
order by find_in_set(item_num,'GMEXIN10484','HXEXIN10472','HXEXIN10471','GMEXIN10487','GMEXIN10483' )

最后出来的列表是按
'GMEXIN10484','HXEXIN10472','HXEXIN10471','GMEXIN10487','GMEXIN10483'
这个来排序

楼上的说法不错:将该字段进行某种函数的处理后进行排序。
但这里的数据看上去似乎没有什么函数关系。
MYSQL的这个功能不错,可惜在ORACLE里没有见过。
既然是用户自己的排序方法,那么感觉这个问题更偏重于应用逻辑。
一个思路:自己建立一个排序字段(PX),录入信息的时候,用户可以决定该条记录的排序等级(自动、手动填写该字段都可以)。应用的时候可以按照这个字段进行排序。这里是用户指定的排序方式,以后要调整顺序时,修改这个排序字段的值就可以了。
参考技术A find_in_set这个函数不错,可惜Oracle中没有,但是我们可以变相应用,同样可以起到相同的效果。

select
decode(teii.item_num,'GMEXIN10484',1,'HXEXIN10472',2,'HXEXIN10471',3,'GMEXIN10487',4,'GMEXIN10483',5) sequence ,
teii.*
from t_exam_item_info teii
where teii.item_num in ( 'GMEXIN10484','HXEXIN10472','HXEXIN10471','GMEXIN10487','GMEXIN10483' )
order by decode(teii.item_num,'GMEXIN10484',1,'HXEXIN10472',2,'HXEXIN10471',3,'GMEXIN10487',4,'GMEXIN10483',5) ;本回答被提问者采纳
参考技术B oralce中的查询是按照字段来排序的,有升序【asc】,降序【desc】,你的查询条件也是一字段,所以可以按照查询条件所在的字段来排序。这个可能与mysql中查询出来的效果是一样的,
还可以将字段回上某个函数值来排序,这个就看你的需要了。如
select * from t_exam_item_info
where tem_num in ( 'GMEXIN10484','HXEXIN10472','HXEXIN10471','GMEXIN10487','GMEXIN10483' )
order by infocode desc;
这个是以字段infocode降序排序的结果。
参考技术C select * from t_exam_item_inf order by i (表中某字段) [desc]
desc降序追问

这个不行啊

参考技术D 点击链接进去看,我自己写的函数
http://blog.csdn.net/u011713224/article/details/18988179

mysql类似oracle rownum写法

rownum是oracle才有的写法,rownum在oracle中可以用于取第一条数据,或者批量写数据时限定批量写的数量等

mysql取第一条数据写法

  SELECT * FROM t order by id LIMIT 1;

oracle取第一条数据写法

  SELECT * FROM t where rownum =1 order by id;

ok,上面是mysql和oracle取第一条数据的写法对比,不过这只是rownum的一种用法,rownum还可以用于批量写数据

往t表批量写一万条数据:

  insert into t(id,date) select sys_guid(),sysdate from dual connect by rownum<=10000;

oracle原版写法:

select * from (select id,name from t) where rownum <![CDATA[<=]]> to_number(num);

mysql改写后的SQL:

SELECT 
  * 
FROM
  (SELECT 
    tb.*,
    @rownum := @rownum + 1 AS rownum 
  FROM
    (SELECT 
      id,
      NAME 
    FROM
      t) tb,
    (SELECT 
      @rownum := 0) r) AS t 
WHERE rownum <= CAST(num AS SIGNED INTEGER) ;

以上是关于oracle 有没有类似mysql的find_in_set功能的主要内容,如果未能解决你的问题,请参考以下文章

oracle 有没有类似mysql的find_in_set功能

oracle有没有类似sqlserver中include语句的覆盖索引?

mysql中如何实现类似oracle中的connect by prior这样的递归查询?给分了 说具体点

oracle里面有没有类似与sql server里面的go?

oracle有没有类似sqlserver的查询分析器的工具呢本身

mysql类似oracle rownum写法