在Oracle中,仅使用ORDER BY不会对版本号进行排序。我的Version_Number字段被声明为a,VARCHAR并且无法更改。例如:以下版本:
ORDER BY
Version_Number
VARCHAR
1.20 1.9 1.18 1.13 1.5 1.11 2.0 1.8 1.3 1.2 1.1 1.0 1.10
应该排序为
2.0 1.20 1.18 1.13 1.11 1.10 1.9 1.8 1.5 1.3 1.2 1.1 1.0
我研究了几篇文章,但似乎都没有真正达到我的目的,或者答案是针对SQL Server等的,而不是针对Oracle的。我碰到了这个看起来很有效的特定sql。
select version_number from mytable order by lpad(version_number, 4) desc;
以这种方式对版本进行排序:
1.20 1.18 1.13 1.11 1.10 2.0 1.9 1.8 1.5 1.3 1.2 1.1 1.0
我相信此sql语句适用于SQL Server:
SQL Server
select version_number from mytable order by cast ('/' + replace(version_number , '.', '/') + '/' as hierarchyid) desc;
但是,这不适用于Oracle。在Oracle中,hierarchyid可以替代吗?
这是做到这一点的一种方法。首先按前面.的数字排序,然后按后面的数字排序.
.
select version_number from mytable order by substr(version_number, 1, instr(version_number,'.')-1) desc ,length(substr(version_number, instr(version_number,'.')+1)) desc ,substr(version_number, instr(version_number,'.')+1) desc