oracle order column by adjacent values 从中位数开始并在任一侧向外添加

oracle order column by adjacent values starting from median and adding outward on either side

很难想出一个合适的标题,所以希望这个描述和下面的例子能让它更清楚。

我有一个 table,其中有一个 non-null 列(但不是主键),其值是一个存储为字符串的五位数,例如“00001”、“00002”、“ 00003', ..., '99999'。并非所有数字都存在(序列可能缺少一个数字)。我正在尝试进行查询,如果给出数字的前两位数,我可以根据从中间值开始向外工作的相邻数字对 select 语句进行排序。

这是我需要的示例 (sql fiddle here),但不幸的是我无法使用案例语句来排序结果,因为案例未知时间,可能会有很多。

select number_str_id from my_table
where number_str_id like '00%'
order by 
    case to_number(number_str_id)
        when 1 then 9
        when 2 then 7
        when 3 then 5
        when 4 then 3
        when 5 then 1
        when 6 then 2
        when 7 then 4
        when 8 then 6
        when 9 then 8
    end
    asc;

非常感谢任何建议。谢谢!

(期待评论。)

这个方向对吗?

order by 
    case to_number(substr(number_str_id, 3, 1))
        when 1 then 9
        when 2 then 7
        when 3 then 5
        when 4 then 3
        when 5 then 1
        when 6 then 2
        when 7 then 4
        when 8 then 6
        when 9 then 8
    end,
    case to_number(substr(number_str_id, 4, 1))
        when 1 then 9
        when 2 then 7
        when 3 then 5
        when 4 then 3
        when 5 then 1
        when 6 then 2
        when 7 then 4
        when 8 then 6
        when 9 then 8
    end,
    case to_number(substr(number_str_id, 5, 1))
        when 1 then 9
        when 2 then 7
        when 3 then 5
        when 4 then 3
        when 5 then 1
        when 6 then 2
        when 7 then 4
        when 8 then 6
        when 9 then 8
    end

我不确定我是否理解你这里的逻辑。