sql - 在 Oracle 查询中将 varchar 列排序为整数值

标签 sql oracle sorting oracle10g

我有一列 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_numberDOOT 转换为数值

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/

相关文章:

sql - 如何选择 TOP x 但仍获得整个查询的 COUNT?

sql - 是否有一个聚合函数可以返回组内的第一个非空值?

sql - PLSQL 需要匹配嵌套记录

oracle - 在 TERMINATED 和 ENCLOSED 字段后未找到终止符

json - 如何通过 jq 中这些键的键和值对 json 文件进行排序

php - 创建多值搜索,与 SQL 作斗争

php - 未知列缺少 WHERE 子句 mysql 命令行

c++ - 在 C 中合并 2 个排序数组

sql - 使用查询将数据插入临时表

C# 基本字典排序 只需要清除错误