现有数据有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)