当前位置: 代码迷 >> Oracle开发 >> oracle 排序,该怎么解决
  详细解决方案

oracle 排序,该怎么解决

热度:440   发布时间:2016-04-24 06:40:59.0
oracle 排序
现有数据有1 , 1.1 , 1.1.2 ,2 , 2.1 ,3, 3.1 ,3.2,……10.1,10.1.1 ,11.1.1,后面有多少个.我也不清楚,请大家指教
------解决方案--------------------
这个用正则就好了吧,比如

WITH r AS
 (SELECT '1.1' x
  FROM   dual
  UNION ALL
  SELECT '1.2'
  FROM   dual
  UNION ALL
  SELECT '2'
  FROM   dual
   UNION ALL
  SELECT '2.1'
  FROM   dual
  UNION ALL
  SELECT '11.0.1'
  FROM   dual)
SELECT *
FROM   r
ORDER  BY nvl(0 + regexp_substr(x, '\d+', 1),-1),
          nvl(0 + regexp_substr(x, '\d+', 2),-1),
          nvl(0 + regexp_substr(x, '\d+', 3),-1),
          nvl(0 + regexp_substr(x, '\d+', 4),-1)


------解决方案--------------------

WITH r AS
 (SELECT '1.1' x
  FROM   dual
  UNION ALL
  SELECT '1.2'
  FROM   dual
  UNION ALL
  SELECT '2'
  FROM   dual
   UNION ALL
  SELECT '2.1'
  FROM   dual
  UNION ALL
  SELECT '11.0.1'
  FROM   dual)
SELECT *
FROM   r
ORDER  BY nvl(0 + regexp_substr(x, '\d+', 1,1),-1),
          nvl(0 + regexp_substr(x, '\d+', 1,2),-1),
          nvl(0 + regexp_substr(x, '\d+', 1,3),-1),
          nvl(0 + regexp_substr(x, '\d+', 1,4),-1)
  相关解决方案