2014-12-02 2 views
1

У меня есть список базы данных.Oracle Substr SQL

**NAME** 
OEE_LINE_ABC 
OEE_LINE_ABCD 
OEE_LINE_QWERTYUIOP 
OEE_LINE_zxcvbd 

мне нужно, чтобы захватить Name что после OEE_LINE_. Но это не стандартизирует, сколько персонажей. То, что я получаю от Google, фиксирует количество символов.

Пример:

SUBSTR(Name,10,3) 
Result: 'ABC' 

Если я использую выше подстрока, он в состоянии захватить 1-значение (OEE_LINE_ABC) без проблем, когда доходит до 2-го значения, есть проблема, потому что выше SubStr только может получить 3-х символов.

Ожидаемый результат:

SQL-оператор в состоянии захватить значения, которые после OEE_LINE_

Результат (возвращение имя без OEE_LINE_):

Name = ABC 
Name = ABCD 
Name = QWERTYUIOP 
Name = zxcvbd 

Любые связанные сообщения для обмена и отвечать?

ответ

1

Я хотел бы предложить глядя в последний '_ 'и принимать строку оттуда:

select substr(name, length(name) - instr(reverse(name), '_') + 2) 
+0

Привет, Гордон, это работает, но есть одна проблема, это вернуться с дополнительным '_'. Пример. Он должен возвращать только ABC вместо '_ABC' – Newbie

+0

. Я получил ответ уже Гордон, я меняю' + 1' на '+ 2'. Большое спасибо! – Newbie

1
SUBSTR(Name,10,length(Name)-9) 
+0

Привет, что делает -9 означает? – Newbie

+0

Привет, вы должны вставить длину вашей строки минус 9, которая является длиной «OEE_LINE_» вместо 3 в третьем параметре функции SUBSTR – jfun

+0

Я думал, 3 сколько значений, которые я хочу захватить, и 10, где я хотел начать захватить 'Имя', accroding [ссылка] (http://www.techonthenet.com/oracle/functions/substr.php) – Newbie

1

Если вам нужна остальная часть строки, просто указать начальную позицию:

ВЫБРАТЬ SUBSTR (имя, 10)

SQL Fiddle

Смежные вопросы