对于定义为varchar2列的行$0-$50, $50-$100, $100-$500, $500+
,我有以下价格范围。我想按照上面给出的顺序对具有值的行进行排序。任何人都可以建议我这样做。
答案 0 :(得分:2)
您可以使用regexp_substr()
执行所需操作。但是,case
可能最简单:
order by (case pricerange
when '$0-$50' then 1
when '$50-$100' then 2
when '$100-$500' then 3
when '$500+' then 4
else 999
end)
答案 1 :(得分:0)
也许你会考虑这样的事情。
WIDTH_BUCKET(exp, min,max,buckets_cnt)
。该函数将exp分配给其存储桶。它创建了buckets_cnt + 2
以下示例创建了5个存储桶WIDTH_BUCKET(price,50,500,3)
。
(500-50)/3 = 150
0 - <50 less than min
1 - (50 : 200)
2 - (200 : 350)
3 - (350 : 500)
4 - 500> more than max
with prod_table as( select 'A' prod_name, 49 price from dual
union all
select 'B' prod_name, 100 price from dual
union all
select 'c' prod_name, 200 price from dual
union all
select 'd' prod_name, 300 price from dual
union all
select 'e' prod_name, 1000 price from dual)
SELECT prod_name, price,WIDTH_BUCKET(price,50,500,3) from prod_table order by WIDTH_BUCKET(price,50,500,3) desc