Добро пожаловать в форум, Guest  >>   Войти | Регистрация | Поиск | Правила | В избранное | Подписаться
Все форумы / Oracle Новый топик    Ответить
 Какая внутренняя функция...  [new]
MaDfM
Member

Откуда:
Сообщений: 15
В таблице есть записи вида "число-1_Фраза", необходимо при селекте получить только "число". Подскажите какая штатная функция так сможет???
11 сен 07, 15:35    [4650088]     Ответить | Цитировать Сообщить модератору
 Re: Какая внутренняя функция...  [new]
juks@gala.net
Member

Откуда: Киев
Сообщений: 4212
translate
11 сен 07, 15:36    [4650103]     Ответить | Цитировать Сообщить модератору
 Re: Какая внутренняя функция...  [new]
juks@gala.net
Member

Откуда: Киев
Сообщений: 4212
1-ый нх
11 сен 07, 15:36    [4650106]     Ответить | Цитировать Сообщить модератору
 Re: Какая внутренняя функция...  [new]
dmidek
Member

Откуда: Киев - Дортмунд
Сообщений: 116320
По обстоятельствам вполне может и substr подойти :-)
11 сен 07, 15:38    [4650117]     Ответить | Цитировать Сообщить модератору
 Re: Какая внутренняя функция...  [new]
Elic
Member

Откуда:
Сообщений: 29991
STFF Извлечение числового значения из строки.
11 сен 07, 15:40    [4650131]     Ответить | Цитировать Сообщить модератору
 Re: Какая внутренняя функция...  [new]
MaDfM
Member

Откуда:
Сообщений: 15
translate не подойдет, потому, что есть цифра -1_, которую тоже надо отрезать.
substr не подходит, т.к. число от 2 до 4 цифр.
STFF не подходит, т.к. убирает 0 в начале числа, если цифра 044, например.

Есть еще идеи???
11 сен 07, 16:14    [4650488]     Ответить | Цитировать Сообщить модератору
 Re: Какая внутренняя функция...  [new]
dmidek
Member

Откуда: Киев - Дортмунд
Сообщений: 116320
MaDfM
translate не подойдет, потому, что есть цифра -1_, которую тоже надо отрезать.
substr не подходит, т.к. число от 2 до 4 цифр.
STFF не подходит, т.к. убирает 0 в начале числа, если цифра 044, например.

Есть еще идеи???


Здоровы Вы всех разбросали - одни руины

Приведите репрезентативные примеры Ваших исходных данных.
Сдается мне, что годится и то, и другое, и третье
11 сен 07, 16:16    [4650520]     Ответить | Цитировать Сообщить модератору
 Re: Какая внутренняя функция...  [new]
MaDfM
Member

Откуда:
Сообщений: 15
))))

Пример
044-1_Gorod
1593-1_Selo
12-1_Test
655-1_tekst4

Ну и так далее.
11 сен 07, 16:18    [4650547]     Ответить | Цитировать Сообщить модератору
 Re: Какая внутренняя функция...  [new]
yra1973
Member [заблокирован]

Откуда: Москва
Сообщений: 100
select substr(str,instr(str,'-') + 1,instr(str,'_') - (instr(str,'-') + 1)) from (
select 'число-0121_Фраза' str from dual);
11 сен 07, 16:19    [4650553]     Ответить | Цитировать Сообщить модератору
 Re: Какая внутренняя функция...  [new]
MaDfM
Member

Откуда:
Сообщений: 15
yra1973
select substr(str,instr(str,'-') + 1,instr(str,'_') - (instr(str,'-') + 1)) from (
select 'число-0121_Фраза' str from dual);


Это несколько не те цифры выдает, необходимо получить первое "число" )
11 сен 07, 16:22    [4650601]     Ответить | Цитировать Сообщить модератору
 Re: Какая внутренняя функция...  [new]
dmidek
Member

Откуда: Киев - Дортмунд
Сообщений: 116320
MaDfM
))))

Пример
044-1_Gorod
1593-1_Selo
12-1_Test
655-1_tekst4

Ну и так далее.


Ну я защищу свой кровный вариант :-)

SQL> with tab1 as
  2  (
  3  select '044-1_Gorod' str from dual
  4  union all
  5  select '1593-1_Selo' from dual
  6  union all
  7  select '12-1_Test' from dual
  8  union all
  9  select '655-1_tekst4' from dual
 10  )
 11  select ltrim(substr(str,1,instr(str,'-')-1),'0')
 12  from tab1
 13  /
 
LTRIM(SUBSTR(STR,1,INSTR(STR,'
------------------------------
44
1593
12
655
 
SQL> 
11 сен 07, 16:23    [4650623]     Ответить | Цитировать Сообщить модератору
 Re: Какая внутренняя функция...  [new]
MaDfM
Member

Откуда:
Сообщений: 15
044!=44, вот где трабл...
11 сен 07, 16:25    [4650636]     Ответить | Цитировать Сообщить модератору
 Re: Какая внутренняя функция...  [new]
dmidek
Member

Откуда: Киев - Дортмунд
Сообщений: 116320
MaDfM
044!=44, вот где трабл...


Вы про мой вариант ?
11 сен 07, 16:26    [4650645]     Ответить | Цитировать Сообщить модератору
 Re: Какая внутренняя функция...  [new]
yra1973
Member [заблокирован]

Откуда: Москва
Сообщений: 100
проще!!!
select substr(str,1,instr(str,'-',1,1) - 1) from (
select '00000123456-0121_Фраза' str from dual);
11 сен 07, 16:27    [4650660]     Ответить | Цитировать Сообщить модератору
 Re: Какая внутренняя функция...  [new]
nikopol
Member

Откуда:
Сообщений: 335
MaDfM
044!=44, вот где трабл...

ltrim уберите и будет счастье
11 сен 07, 16:29    [4650681]     Ответить | Цитировать Сообщить модератору
 Re: Какая внутренняя функция...  [new]
yra1973
Member [заблокирован]

Откуда: Москва
Сообщений: 100
проще!!!
select substr(str,1,instr(str,'-',1,1) - 1) from (
select '00000123456-0121_Фраза' str from dual);
11 сен 07, 16:30    [4650700]     Ответить | Цитировать Сообщить модератору
 Re: Какая внутренняя функция...  [new]
dmidek
Member

Откуда: Киев - Дортмунд
Сообщений: 116320
nikopol
MaDfM
044!=44, вот где трабл...

ltrim уберите и будет счастье


Убрать не проблема - еще проще будет.
Я не думал, что 044 - это число :-)
11 сен 07, 16:30    [4650708]     Ответить | Цитировать Сообщить модератору
 Re: Какая внутренняя функция...  [new]
nikopol
Member

Откуда:
Сообщений: 335
dmidek
nikopol
MaDfM
044!=44, вот где трабл...

ltrim уберите и будет счастье


Убрать не проблема - еще проще будет.
Я не думал, что 044 - это число :-)

а я и не Вам, а топикстартеру это сказал :)
11 сен 07, 16:33    [4650745]     Ответить | Цитировать Сообщить модератору
 Re: Какая внутренняя функция...  [new]
MaDfM
Member

Откуда:
Сообщений: 15
yra1973
проще!!!
select substr(str,1,instr(str,'-',1,1) - 1) from (
select '00000123456-0121_Фраза' str from dual);


Спасибо, добрый человек, то что надо!!!

P.S. Простите, согласен, что надо было написать не число, а цифра! )
11 сен 07, 16:34    [4650759]     Ответить | Цитировать Сообщить модератору
 Re: Какая внутренняя функция...  [new]
dmidek
Member

Откуда: Киев - Дортмунд
Сообщений: 116320
MaDfM

P.S. Простите, согласен, что надо было написать не число, а цифра! )


Цифра ? От 0 до 9 в десятичной системе !!
11 сен 07, 16:36    [4650790]     Ответить | Цитировать Сообщить модератору
 Re: Какая внутренняя функция...  [new]
aeugen
Member

Откуда:
Сообщений: 3043
Можно и так:

select regexp_substr(str, '^[^-]*')
select '00000123456-0121_Фраза' str from dual);
11 сен 07, 16:52    [4650961]     Ответить | Цитировать Сообщить модератору
 Re: Какая внутренняя функция...  [new]
Piggys
Member

Откуда:
Сообщений: 158
with tab1 as
  (
  select '044-1_Gorod' str from dual
  union all
  select '1593-1_Selo' from dual
  union all
  select '12-1_Test' from dual
  union all
  select '655-1_tekst4' from dual
  union all
  select '000-2_tekst3' from dual
  union all
  select 'SSS-1_tekst4' from dual
 )
select to_number(substr(translate(upper(substr(tab1.str,1,instr(tab1.str,'-')-1)),'1234567890ABCDEFGHIJKLMNOPQRSTUVWXYZ','123456789'),1,1))
from tab1

11 сен 07, 17:13    [4651178]     Ответить | Цитировать Сообщить модератору
 Во!  [new]
Piggys
Member

Откуда:
Сообщений: 158
with tab1 as
  (
  select '044-1_Gorod' str from dual
  union all
  select '1593-1_Selo' from dual
  union all
  select '12-1_Test' from dual
  union all
  select '655-1_tekst4' from dual
  union all
  select '000-2_tekst3' from dual
  union all
  select 'SSS-1_tekst4' from dual
 )
select substr(to_char(to_number(translate(upper(substr(tab1.str,1,instr(tab1.str,'-')-1)),'123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ','123456789'))),1,1)
from tab1
11 сен 07, 17:23    [4651287]     Ответить | Цитировать Сообщить модератору
Все форумы / Oracle Ответить