我有一列 DOOR,它是表 ADDRESS 中的 VARCHAR2。我想对 DOOR 列进行排序。
DOOR 只有两位数字,没有-
符号
当前当我使用查询时
select sname, door, zip from address a order by door
我得到以下结果:
a
b
1
10
11
2
3
31
但我希望结果看起来像这样:
a
b
1
2
3
10
11
31
我尝试使用 to_number
将 DOOT 转换为数值
select sname, to_number(door) dnr, zip from address a order by dnr
但它给我一个错误 ORA-01722
。
最佳答案
您可以使用 order by
中的逻辑来执行此操作:
order by (case when regexp_like(door, '^[0-9]*$') = 0 then 1 else 0 end) desc,
(case when regexp_like(door, '^[0-9]*$') = 0 then door end),
length(door),
door
这首先将非数字值放在首位。第二个子句按字母顺序对这些进行排序。第三个和第四个是数字。通过对值之前的长度进行排序,您将按顺序获得数字。
关于sql - 在 Oracle 查询中将 varchar 列排序为整数值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18363541/