是否可以通过手动清单订购

时间:2015-01-06 17:05:45

标签: teradata

我正在尝试创建一个查询,将付款分组到范围内(例如,4 - 5 - 9,10 - 49,50 - 99,100- 149,150 +)。
如果我尝试按上述范围订购它们,它们按字母顺序排列(如您所料)。

我是否可以通过手动清单订购这些产品(参见上述范围)

2 个答案:

答案 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