Разбиение данных в SQL

Есть столбец в котором храниться ФИО, но мне необходимо отсеять фамилии, чтобы остались только имена и отчества но при этом чтобы фамилии просто отсеивались не создавая новый столбец. Как это можно сделать через запрос ? Заранее спасибо.


Ответы (1 шт):

Автор решения: Vitaliy Zlobin

Я создал пользовательскую функцию, которая делит текст по символу(в твоём случае пробел) и выводит указанную по счёту часть(токен). У меня SQL Server, поэтому код на T-SQL. Можно переписать или поискать переводчик с MS SQL на PostgreSQL:

CREATE FUNCTION dbo.Split(@text NVARCHAR(512), @symbol CHAR, @token INT)
RETURNS NVARCHAR(128)
AS
BEGIN

    DECLARE @count INT = 0
    DECLARE @i INT = 0
    DECLARE @result NVARCHAR(128)

    WHILE @i <= LEN(@text)
        BEGIN
            --Если текущий элемент равен нашему символу, то счётчик токенов увеличиваем
            IF SUBSTRING(@text, @i, 1) = @symbol SET @count += 1
            --Если счётчик токенов равен заданному токену, то к временной строке прибавляем текущий символ цикла
            IF @count = @token SET @result = CONCAT(@result, SUBSTRING(@text, @i, 1))
            --Инкрементация счётчика цикла
            SET @i += 1
        END
    --Если больше 1, то отсекаем первый символ
    IF @token > 1 SET @result = SUBSTRING(@result, 2, 512)

    RETURN @result

END
→ Ссылка