Разбиение данных в 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