Как упорядочить поля, используя ORACLE select, когда мои строки могут содержать символы подстановки - PullRequest
2 голосов
/ 29 сентября 2011

У меня есть следующая таблица ORACLE и данные:

create table test_table (field1 varchar2(20));

insert into test_table values ('aaa.bbb.ccc.dd');
insert into test_table values ('aaa.bbb.c*c.dd');
insert into test_table values ('aaa.bbb.ccc');
insert into test_table values ('aaa.b*b.ccc');
insert into test_table values ('aaa.bbb');
insert into test_table values ('a*a.bbb');
insert into test_table values ('aaa');
insert into test_table values ('bbb.ccc.dd.ee');
insert into test_table values ('bbb.ccc.dd');
insert into test_table values ('bbb.ccc');
insert into test_table values ('bbb');

Я бы хотел выбрать таблицу, которая будет извлекать записи в следующем порядке:

aaa.bbb.ccc.dd
aaa.bbb.c * c.dd
aaa.bbb.ccc
aaa.b * b.ccc
aaa.bbb
a * a.bbb
aaa
bbb.ccc.dd.ee
bbb.ccc.dd
bbb.ccc
bbb

В моих вставках над записями, очевидно, уже в правильном порядке, но ониобычно не будет.

Если я запускаю следующее, выберите:

select field1 from test_table
order by field1;

Я получу вывод:

a * a.bbb
aaa
aaa.b * b.ccc
aaa.bbb
aaa.bbb.c * c.dd
aaa.bbb.ccc
aaa.bbb.ccc.dd
bbb
bbb.ccc
bbb.ccc.dd
bbb.ccc.dd.ee

Как написать оператор SELECT для получения желаемого заказа?

1 Ответ

2 голосов
/ 30 сентября 2011
select field1
from test_table
order by  substr(field1, 1,1), replace(field1, '*', substr(field1, instr(field1, '*')-1, 1)) desc, instr(field1, '*') ;
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...