Как сортировать по подстрокам?

wessen
Дата: 16.03.2011 22:53:14
Например в столбце есть данные:
гор. Москва
гор. Астрахань
дер. Алтын
ааа. Разгуляево

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

дер. Алтын
гор. Астрахань
гор. Москва
ааа. Разгуляево
andreymx
Дата: 16.03.2011 23:19:03
единственный правильный вариант - разделить город в одну колонку, а Москву - в другую
A.K.
Дата: 16.03.2011 23:19:17
Если объем данных в таблице большой и требуется обеспечить приемлемую производительность, я бы рассмотрел вариант о сохранении названия города без приставки в отдельном столбце - например, заполняемом триггером. В остальном - не понятно, в чем здесь вопрос. Сортировать данные по столбцу или выражению, которого нет в результирующей выборке, Oracle не запрещает.
samatom
Дата: 16.03.2011 23:20:31
wessen
Например в столбце есть данные:
гор. Москва
гор. Астрахань
дер. Алтын
ааа. Разгуляево

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

дер. Алтын
гор. Астрахань
гор. Москва
ааа. Разгуляево


базы под рукой нет, но вот это должно по идее работать

with t as (select 'гор. Москва' x from dual union all
           select 'гор. Астрахань' x from dual)
select t.x
      ,trunc( substr( t.x, instr(t.x,' ') + 1, length(t.x) ) ) city
from t
order by city
samatom
Дата: 16.03.2011 23:23:46
A.K.
Если объем данных в таблице большой и требуется обеспечить приемлемую производительность, я бы рассмотрел вариант о сохранении названия города без приставки в отдельном столбце - например, заполняемом триггером. В остальном - не понятно, в чем здесь вопрос. Сортировать данные по столбцу или выражению, которого нет в результирующей выборке, Oracle не запрещает.


вдруг здесь идёт миграция или чистка данных и это всё разово. Если нет, то можно не изменять структуру таблицы, а навесить function based index.
andreymx
Дата: 16.03.2011 23:25:18
samatom
Если нет, то можно не изменять структуру таблицы, а навесить function based index.
зачем к неверной структуре еще и FBI городить
Elic
Дата: 16.03.2011 23:35:57
samatom
вот это должно по идее работать
trunc( substr(
an0nym
Дата: 17.03.2011 00:54:12
andreymx
samatom
Если нет, то можно не изменять структуру таблицы, а навесить function based index.
зачем к неверной структуре еще и FBI городить

Не, а действительно, если только для целей сортировки - чем плох FBI?
Вячеслав Любомудров
Дата: 17.03.2011 03:10:31
andreymx
единственный правильный вариант - разделить город в одну колонку, а Москву - в другую
Да-да
За МКАД-ом жизни нет
B4S1S
Дата: 17.03.2011 08:19:21
regexp_substr(x,'\..*')
Но это не правильный вариант
:)