Oracle 10g SQL排序VARCHAR2

Gab*_*tiz 6 sql sorting oracle oracle10g varchar2

我正在使用oracle 10g进行排序问题.不确定它是否特定于10g.

我有下表:

ID  NAME
 1  A.1
 2  A.3
 3  A.4
 4  A.5
 5  A.2
 6  A.5.1
 7  A.5.2
 8  A.5.10
 9  A.5.10.1
10  A.5.3
Run Code Online (Sandbox Code Playgroud)

执行通用SELECT NAME FROM table_name ORDER BY 1产品:

A.1
A.2
A.3
A.4
A.5
A.5.1
A.5.10
A.5.10.1
A.5.2
A.5.3
Run Code Online (Sandbox Code Playgroud)

当这些部分的数字大于9时,我希望它能正确排序,如下所示:

A.1
A.2
A.3
A.4
A.5
A.5.1
A.5.2
A.5.3
A.5.10
A.5.10.1
Run Code Online (Sandbox Code Playgroud)

我有更多的数字条目,不同的长度和许多数字段大于10的部分.我试图在order by子句中乱用regexp_replace(),但没有运气.任何帮助将不胜感激.

A.B*_*ade 2

尝试这个

WITH t AS
(
  SELECT id,name,
  xmltype('<r><c>' ||replace(NAME, '.', '</c><c>')||'</c></r>') AS xmlname
  FROM table1
)

SELECT name ,id
FROM t
ORDER BY lpad(extract(xmlname,'//c[1]/text()').getstringval(), 5, '0')
||lpad(extract(xmlname,'//c[2]/text()').getstringval(), 5, '0')
||lpad(extract(xmlname,'//c[3]/text()').getstringval(), 5, '0')
||lpad(extract(xmlname,'//c[4]/text()').getstringval(), 5, '0')
Run Code Online (Sandbox Code Playgroud)

是一个小提琴