Не могу найти красивого решения для вычленения слов из строки. Например:
SELECT 'Фамилия' as Col_1, Parse(FullName, ' ')[0] as FirstName,
'Имя' as Col_2, Parse(FullName, ' ')[1] as Name,
'Отчество' as Col_3, Parse(FullName, ' ')[2] as Patronymic
FROM Students
Есть ли подобное в SQL вообще без написания своих хранимых функций?
Ответ
Можно обойтись без регулярок, используя только substr и instr. Несмотря на свою неказистость, такое решение может показывать значительно более высокую скорость по сравнение с регулярками.
with Students as (
select level id, 'fname'||level||' mname'||level||' lname'||level fullName from dual
connect by level <= 3
)
select s.*,
substr(s.fullName, 1, instr(s.fullName, ' ', 1, 1) - 1 ) as fName,
substr(s.fullName, instr(s.fullName, ' ', 1, 1), instr(s.fullName, ' ', 1, 2) - instr(s.fullName, ' ', 1, 1) ) as mName,
substr(s.fullName, instr(s.fullName, ' ', 1, 2) ) as lName
from Students s
Комментариев нет:
Отправить комментарий