Работает с 9i +:
WITH portion AS (
SELECT SUBSTR(t.otname, INSTR(t.otname, ".", 1, 3)+1, INSTR(t.otname, ".", 1, 4)) 'sncode'
FROM TABLE t)
SELECT t.description_text
FROM TABLE2 t
JOIN portion p ON p.sncode = t.sncode
Использование SUBSTR должно быть очевидным; INSTR используется для определения местоположения точки (.), Начиная с первого символа в строке (значение параметра 1), по 3-му и 4-му появлению в строке. Возможно, вам придется вычесть одно из позиции, возвращенной для 4-го экземпляра периода - сначала проверьте это, чтобы убедиться, что вы получаете правильные значения:
SELECT SUBSTR(t.otname, INSTR(t.otname, ".", 1, 3)+1, INSTR(t.otname, ".", 1, 4)) 'sncode'
FROM TABLE t
Я использовал факторинг подзапроса, чтобы подстрока появлялась до того, как вы присоединитесь ко второй таблице. Это можно сделать как подзапрос, но факторинг подзапроса выполняется быстрее.