Q: Модификация string в postgresql Атрибут fio хранит 'Иванов Иван Михайлович'.
Мне нужно преобразовать в 'Иванов И. М.'
У меня получилось только сделать 'Иванов И.' вот так:
substr(fio, 1, strpos(fio,' ')-1)|| ' ' || substr(fio,strpos(fio,' ')+1,1)||'.' as fio

Получить 'М.' я не могу. Загвоздка в том, что, при использовании такой же логики, второй пробел обработать не получается (подходящей регулярки не нашел). Может, кто-то с этим сталкивался? Буду благодарен за ваши идеи и предложения.
substr(string, from [, count]) - извлекает подстроку.
strpos(string, substring) - возвращает положение указанной подстроки.

A: Можно воспользоваться функцией замены по регулярному выражению:
regexp_replace(fio,'(\w+)\s+(.)\w*\s+(.)\w*','\1 \2. \3.')

Тест на sqlfiddle.com

A: split_part(fio, ' ', 1)||' '||substr(split_part(fio, ' ', 2), 1, 1)||'.'||substr(split_part(fio, ' ', 3), 1, 1)||'.'

split_part(string text, delimiter text, field int) - Разделяет строку string по символу delimiter и возвращает элемент по заданному номеру (считая с 1).
