sql - Oracle 10g SQL 排序 VARCHAR2

标签 sql oracle sorting 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

执行通用 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

当这些部分的数字大于 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

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

最佳答案

尝试这个

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')

Here是 fiddle

关于sql - Oracle 10g SQL 排序 VARCHAR2,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12570026/

相关文章:

sql - 搜索大数据表

sql - where 子句和 el 中的 case 语句不执行任何操作

mysql - 如何从外键表访问数据

mysql - SQL 挑战 - 显示具有特定列值的 N(1、X 或全部)行

android - 排序嵌套列表对象

mysql - 无法从两个表中获取唯一值

sql - 在另一个 plsql 脚本中调用 plsql 脚本

java - 使用 Oracle Wallet 身份验证从 Spring-jdbc 连接到 Oracle DB

matlab - 如何根据特定行(Matlab)中包含的条件对列进行排序?

javascript - 需要更智能的 jQuery 表排序功能