Страницы

Поиск по вопросам

пятница, 14 декабря 2018 г.

Парсинг строки для разбиения на слова по пробелу

Не могу найти красивого решения для вычленения слов из строки. Например:
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

Комментариев нет:

Отправить комментарий