Sql oracle按从中间值开始的相邻值排序列,并在每一侧向外添加

Sql oracle按从中间值开始的相邻值排序列,并在每一侧向外添加,sql,oracle,sql-order-by,Sql,Oracle,Sql Order By,很难想出一个合适的标题,所以希望这个描述和下面的例子能让它更清楚 我有一个表,它有一个非空列(但不是主键),其值是一个存储为字符串的五位数,如“00001”、“00002”、“00003”、…、“99999”。并非所有数字都存在(序列可能缺少一个数字)。我试图进行一个查询,如果给定数字的前两位,我可以根据相邻的数字对select语句进行排序,从中间值开始向外排序 下面是一个我需要的示例(sql fiddle),但不幸的是,我不能使用case语句来排序结果,因为这些案例在时间之前是未知的,可能会有

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

我有一个表,它有一个非空列(但不是主键),其值是一个存储为字符串的五位数,如“00001”、“00002”、“00003”、…、“99999”。并非所有数字都存在(序列可能缺少一个数字)。我试图进行一个查询,如果给定数字的前两位,我可以根据相邻的数字对select语句进行排序,从中间值开始向外排序

下面是一个我需要的示例(sql fiddle),但不幸的是,我不能使用case语句来排序结果,因为这些案例在时间之前是未知的,可能会有很多

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
我不确定我是否理解你的逻辑