вопрос на миллион))

Eyxeniy
Дата: 09.12.2012 21:27:32
У меня получился такой запрос, поискав по интернету.
Передел под свой.
select 
decode(translate(some_column, '_0123456789abcdefghijklmnoprstuvwxyz', '_'), null, to_char(some_column)) colum

  from
  ( select '123abcd5' as some_column from dual union all
    select '50e2fgh'  as some_column from dual union all
    select '502kl23m1' as some_column from dual union all
    select '502fd456h' as some_column from dual
   
  )

 order by 
 decode(translate(some_column, '_0123456789abcdefghijklmnoprstuvwxyz', '_'), null, to_char(some_column));



Надо сделать так чтобы в этом столбце:
123abcd5
50e2fgh
502kl23m1
502fd456h
когда разные числа, то сортируется по числам (50 123)

Когда одинаковые числа (502 502) то СОРТИРУЕТСЯ ПО ПЕРВОЙ БУКВЕ В ВЫРАЖЕНИИ.

В результате должно быть так!

50e2fgh
123abcd5
502fd456h
502kl23m1

Есть ли у кого какие нибудь мысли ?
Вроде как и легко не что то не выходит ни фига, недельку просидел, решил написать сюда.

И есть еще один запрос
select 
decode(translate(some_column, '_0123456789abcdefghijklmnoprstuvwxyz', '_'), null, to_char(some_column)) colum,
decode(translate(some_column, '_0123456789abcdefghijklmnoprstuvwxyz', '_'), null, to_char(some_column)) colum

  from
  ( select '123abcd5' as some_column from dual union all
    select '50e2fgh'  as some_column from dual union all
    select '502kl23m1' as some_column from dual union all
    select '502fd456h' as some_column from dual 
   
  )

 order by 
 decode(translate(some_column, '_0123456789abcdefghijklmnoprstuvwxyz', '_'), null, to_char(some_column)),
 decode(translate(some_column, '_0123456789abcdefghijklmnoprstuvwxyz', '_'), null, to_char(some_column));

из которого мы получим
COLUM COLUM
--------- ---------
123abcd5 123abcd5
50e2fgh 50e2fgh
502fd456h 502fd456h
502kl23m1 502kl23m1

два одинаковых столбца, а мне надо чтобы было 2 или три разных, т.е. второй полученный столбец должен выводиться с другими данными.
Серафимный Шестикрыл
Дата: 09.12.2012 21:41:55
Eyxeniy,

регулярные выражения
d.nemolchev
Дата: 09.12.2012 21:49:06
Eyxeniy,

With t As
 (Select '123abcd5' s From dual Union All
  Select '50e2fgh' From dual Union All
  Select '502kl23m1' From dual Union All
  Select '502fd456h' From dual)
Select s From t Order By regexp_substr(s, '(\d*)(\D*)', 1, 1, 'i', 1), s
Eyxeniy
Дата: 09.12.2012 22:34:04
d.nemolchev,
а есть вариант по подробнее ?
AmKad
Дата: 09.12.2012 22:38:19
Eyxeniy
а есть вариант по подробнее ?
Нет. Краткость - сестра таланта.
Eyxeniy
Дата: 09.12.2012 22:43:11
AmKad,
мелочный человек.
AmKad
Дата: 09.12.2012 22:51:21
Держи мелочь
order by to_number(regexp_substr(s, '(\d*)')), regexp_substr(s, '(\D*)')
andreymx
Дата: 09.12.2012 23:01:50
только не говорите, что это всё в продакшене, а то я расстроюсь сильно
d.nemolchev
Дата: 09.12.2012 23:06:43
AmKad
Держи мелочь
order by to_number(regexp_substr(s, '(\d*)')), regexp_substr(s, '(\D*)')


Ой, да...
Второпях regexp в to_number() обернуть забыл.
Пасиб, что напомнили...
Eyxeniy
Дата: 09.12.2012 23:07:17
andreymx,
Oracle Database 11g Enterprise Edition Release 11.2.0.3.0 - 64bit Production
PL/SQL Release 11.2.0.3.0 - Production
CORE 11.2.0.3.0 Production
TNS for 64-bit Windows: Version 11.2.0.3.0 - Production
NLSRTL Version 11.2.0.3.0 - Production
А в чем проблема ?