Можно ли заказать по ручному списку

Я пытаюсь создать запрос, который группирует платежи по диапазонам (например, 4-, 5–9, 10–49, 50–99, 100–149, 150+).
Если я попытаюсь упорядочить их по указанному выше диапазону, они появятся в алфавитном порядке (как и следовало ожидать).

Могу ли я заказать их вручную по списку (см. Выше)

2 ответа

Какой у тебя релиз TD?

TD14 поддерживает регулярные выражения, просто извлеките первую строку цифр и приведите ее к целому числу:

ORDER BY CAST(REGEXP_SUBSTR(grp, '[0-9]+') AS INTEGER) 

Вы можете использовать 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
Другие вопросы по тегам