我正在尝试创建一个查询,将付款分组到范围内(例如,4 - 5 - 9,10 - 49,50 - 99,100- 149,150 +)。
如果我尝试按上述范围订购它们,它们按字母顺序排列(如您所料)。
我是否可以通过手动清单订购这些产品(参见上述范围)
答案 0 :(得分:2)
你的TD版本是什么?
TD14支持正则表达式,只需提取第一个数字字符串并将其转换为整数:
ORDER BY CAST(REGEXP_SUBSTR(grp, '[0-9]+') AS INTEGER)
答案 1 :(得分:0)
您可以使用OTRANSLATE,它基本上允许您指定字符并将其替换为另一个字符。
编辑:感谢JNeville让我直接了解这个范围。同样的想法仍然适用,如果你采取他的建议,使最后一个条目也是一个范围。 所以,假设你只有数字,+和 - ,以及空格:
select
otranslate(<your column>,'+- ','')
from
<your table>
哪个应该只返回这些字符串的数字部分。然后你应该能够将它作为整数转换,并对其进行排序。
create volatile table vt as
(select cast ('-5' as varchar(10)) as theCol)
with data
on commit preserve rows;
INSERT into vt values ('10 - 49');
INSERT INTO vt values ('50 - 99');
insert into vt
values ('150-9999');
select
cast (otranslate(theCol,'+- ','') as integer) as theNum
from
vt
order by theNum
5
1049
5099
1509999