Top.Mail.Ru
Мастера DELPHI, Delphi programming community Титульная страница Поиск, карта сайта Написать письмо 
| Новости | Поиск | FAQ | Статьи | Книги | Новости VCL |
| Форумы ЧАТ | Орешник | KOL и MCK |
Форумы -» Основная («Начинающим»)/ Базы / WinAPI / Компоненты / Сети / Media / Игры / Corba и COM / KOL / FreePascal / .Net / Прочее / RSDN.ORG

« предыдущая ветвь | форум | следующая ветвь »

Substr в Oracle [D7]


Дмитрий_Б ©   (2005-11-23 16:28:00) 

Здравствуйте.
Сервер Oracle, в табличке есть поле varchar2, содержащее такие данные:
45
55
25-78
89

мне нужно получить следующее
45
55
78
89
т.е. если в строке есть символ '-' то нужно получить строку после него, иначе взять строку полностью.
При использовании substr(fieldname, -1, 2) получаю:
5
5
8
9
причем в качестве третьего параметра ставил 1, 2, 3,... не меняется ничего.
Подскажите пож-та. Заранее спасибо


Reindeer Moss Eater   (2005-11-23 17:25:00) [1]

select decode(instr(ttt,'-'),0,ttt,substr(ttt,1+instr(ttt,'-'),4000)) from mytable


Дмитрий_Б   (2005-11-23 16:57:00) [2]

Вот спасибо :)


dioman   (2005-11-23 16:53:00) [3]


> Кстати, с какой позиции (в случае отрицательного второго
> параметра) происходит поиск ? Знаю только что с конца строки.
>  Справочника к сожалению нет рядом.


instr(str, substr, a,b) возвращает позицию субстроки в строке.(b-тое вхождение) Если а отрицателен то поиск с конца.


dioman   (2005-11-23 16:51:00) [4]

select substr(test.q, instr(test.q, '-', -1)+1, length(test.q)-instr(test.q, '-', -1))
from test

test.q - текстовое поле


Val   (2005-11-23 16:51:00) [5]

с первого с конца :)
вот и справочник :
SUBSTR
SUBSTRB
varchar2 SUBSTR[B](varchar2 char, integer m{, integer n})
Returns a portion of char, beginning at character m, n characters long.

* If m is 0, it is treated as 1.
* If m is positive, Oracle counts from the beginning of char to find the first character.
* If m is negative, Oracle counts backwards from the end of char.
* If n is omitted, Oracle returns all characters to the end of char. If n is less than 1, a null is returned.

Floating-point numbers passed as arguments to SUBSTR are automatically converted to integers.
SUBSTRB are same as SUBSTR, except that the integer arguments expressed in bytes, rather than in characters. For a single-byte database character set, SUBSTRB is equivalent to SUBSTR.


Дмитрий_Б   (2005-11-23 16:49:00) [6]

Спасибо, правильно. Дальше я разберусь. Кстати, с какой позиции (в случае отрицательного второго параметра) происходит поиск ? Знаю только что с конца строки. Справочника к сожалению нет рядом.


Val   (2005-11-23 16:38:00) [7]

select substr('25-78',-2,2) from dual.
но для решения данной задачи нужно искать позицию '-' еще.


Наверх

Титульная страница Поиск, карта сайта Написать письмо