Используйте комбинацию substr()
и instr()
. Instr дает вам числа, с которых начинается подстрока, такая как :
, затем эти числа можно использовать в рамках substr в качестве параметров, чтобы вернуть только ту часть исходной строки, которая вам нужна. Instr также позволяет указать, какое вхождение этой подстроки (в качестве третьего параметра).
select
instr(customer,':',1,1) first
, instr(customer,':',1,2) second
, instr(customer,':',1,3) third
, substr(customer,instr(customer,':',1,2)+2) second_and_last_part
, substr(customer,instr(customer,':',1,2)+2, instr(customer,':',1,3)-instr(customer,':',1,2)-2) second_last_part
, substr(customer,instr(customer,':',1,3)+2) last_part
from (
select 'Parent Customer : Child1 Customer : Grandchild Customer : GreatGrandchild Customer' as customer from dual
)
nb: использование +2
, которое вы видите выше, связано с тем, что за позицией символа каждого :
также следует пробел, поэтому, чтобы игнорировать оба, мы добавляем 2.
Просто смешайте и сопоставьте различные вызовы функций с различными параметрами, чтобы разделить исходную строку на части, как в запросе выше:
+-------+--------+-------+------------------------------------------------+--------------------------+----------------------+
| FIRST | SECOND | THIRD | SECOND_AND_LAST_PART | LAST_PART | SECOND_LAST_PART |
+-------+--------+-------+------------------------------------------------+--------------------------+----------------------+
| 17 | 35 | 57 | Grandchild Customer : GreatGrandchild Customer | GreatGrandchild Customer | Grandchild Customer |
+-------+--------+-------+------------------------------------------------+--------------------------+----------------------+
INSTR (строка, подстрока [, start_position [, th_appearance]]) ref
SUBSTR (строка, начальная_позиция [, длина]) ref