from test_table ORDER BY
(NVL(regexp_substr(regexp_substr(data,'[^!@]+',1,1),'[^。]+',2),0)
+NVL(regexp_substr(regexp_substr(data,'[^!@]+',1,2),'[^。]+',2),0)
+NVL(regexp_substr(regexp_substr(data,'[^!@]+',1,3),'[^。]+',2),0)
+NVL(regexp_substr(regexp_substr(data,'[^!@]+',1,4),'[^。]+',2),0)
+NVL(regexp_substr(regexp_substr(data,'[^!@]+',1,5),'[^。]+',2),0)
+NVL(regexp_substr(regexp_substr(data,'[^!@]+',1,6),'[^。]+',2),0)
+NVL(regexp_substr(regexp_substr(data,'[^!@]+',1,7),'[^。]+',2),0)
+NVL(regexp_substr(regexp_substr(data,'[^!@]+',1,8),'[^。]+',2),0)
+NVL(regexp_substr(regexp_substr(data,'[^!@]+',1,9),'[^。]+',2),0)
+NVL(regexp_substr(regexp_substr(data,'[^!@]+',1,10),'[^。]+',2),0)
+NVL(regexp_substr(regexp_substr(data,'[^!@]+',1,11),'[^。]+',2),0))
或者
select t.*
from test_table t ,
(select level lvl from dual connect by level <= 11) d group by t.PID ,t.datadate,t.data_type,t.data order by
sum(regexp_substr(regexp_substr(t.data,'[^!@]+',1,d.lvl),'[^。]+',1,2))