Добро пожаловать в форум, Guest  >>   Войти | Регистрация | Поиск | Правила | В избранное | Подписаться
Все форумы / Microsoft SQL Server Новый топик    Ответить
 Как вывести только Имя из столбца ФИО  [new]
AlexandrAVG
Member

Откуда:
Сообщений: 9
Добрый день.
Имеется столбец ФИО "Иванов Иван Иваныч". Как мне вытащить только имя?

Пробовал через
SUBSTRING
и
CHARINDEX
вывести нужные значения, но проблема в том, что длина фамилии и имени разные.

SELECT	SUBSTRING(aff_usr.usr_n, CHARINDEX(' ', aff_usr.usr_n)+1
LEN (aff_usr.usr_n)
 	FROM incident 
	LEFT OUTER JOIN usr aff_usr 
		ON aff_usr.usr_id = incident.aff_usr_id 
		AND incident.aff_usr_id <> 0 


Думал может возможно сделать расчет между пробелами и подставить в
SUBSTRING

Может еще есть какие-то варианты?
18 июн 19, 13:42    [21910623]     Ответить | Цитировать Сообщить модератору
 Re: Как вывести только Имя из столбца ФИО  [new]
Сергей Викт.
Member

Откуда: Москва
Сообщений: 887
AlexandrAVG,

DECLARE @n nvarchar(max)='Иванов Иван Иваныч'
SELECT	LEFT(RIGHT(@n,LEN(@n)-CHARINDEX(' ', @n)),CHARINDEX(' ', RIGHT(@n,LEN(@n)-CHARINDEX(' ', @n))))
18 июн 19, 14:01    [21910646]     Ответить | Цитировать Сообщить модератору
 Re: Как вывести только Имя из столбца ФИО  [new]
Сергей Викт.
Member

Откуда: Москва
Сообщений: 887
Сергей Викт.
AlexandrAVG,

DECLARE @n nvarchar(max)='Иванов Иван Иваныч'
SELECT	LEFT(RIGHT(@n,LEN(@n)-CHARINDEX(' ', @n)),CHARINDEX(' ', RIGHT(@n,LEN(@n)-CHARINDEX(' ', @n))))


точнее даже
DECLARE @n nvarchar(max)='Жловадин Антуан Иваныч'

SELECT	LEFT(RIGHT(@n,LEN(@n)-CHARINDEX(' ', @n)),CHARINDEX(' ', RIGHT(@n,LEN(@n)-CHARINDEX(' ', @n)-1)))
18 июн 19, 14:06    [21910656]     Ответить | Цитировать Сообщить модератору
 Re: Как вывести только Имя из столбца ФИО  [new]
uaggster
Member

Откуда:
Сообщений: 692
И всё бы было хорошо, но бывают, сцуко, имена в виде "Мария Антуанетта", или, что хуже "Мария - Антуанетта" (ага, пробел - тире - пробел).
Причем, млин, в выборке по РФ, где ничто, т.с., не предвещает.

Так что предыдущий ответ, безусловно, верный. Но на любой выборке больше 500 тыс человек - обязательно сломается.
(Из опыта прежней жизни в налоговой).
18 июн 19, 14:14    [21910667]     Ответить | Цитировать Сообщить модератору
 Re: Как вывести только Имя из столбца ФИО  [new]
invm
Member

Откуда: Москва
Сообщений: 8750
declare @n varchar(100) = 'Иванов   Иван Иваныч';

select
 a.x.value('n[text()][2]', 'varchar(100)')
from
 (select cast('<n>' + replace(@n, ' ', '</n><n>') + '</n>' as xml)) a(x);
18 июн 19, 14:15    [21910669]     Ответить | Цитировать Сообщить модератору
 Re: Как вывести только Имя из столбца ФИО  [new]
aleks222
Member

Откуда:
Сообщений: 733
А теперь то же для

Мухамед Бен Оглы Тин
18 июн 19, 14:16    [21910673]     Ответить | Цитировать Сообщить модератору
 Re: Как вывести только Имя из столбца ФИО  [new]
Konst_One
Member

Откуда:
Сообщений: 11456
в Испании вообще у многих по 4 и более имен
18 июн 19, 14:18    [21910677]     Ответить | Цитировать Сообщить модератору
 Re: Как вывести только Имя из столбца ФИО  [new]
Konst_One
Member

Откуда:
Сообщений: 11456
а в Индии сначала идёт имя , а уже потом фамилия
18 июн 19, 14:22    [21910684]     Ответить | Цитировать Сообщить модератору
 Re: Как вывести только Имя из столбца ФИО  [new]
andy st
Member

Откуда:
Сообщений: 757
глянул доступный список людей.
нашел фио из 5 слов.
умные разработчики сделали отдельно поля Ф,И,О
оказалось, что имя - 2 слова, фамилия - 3 слова, отчества нету
счастья тебе, AlexandrAVG
18 июн 19, 14:40    [21910702]     Ответить | Цитировать Сообщить модератору
 Re: Как вывести только Имя из столбца ФИО  [new]
andy st
Member

Откуда:
Сообщений: 757
для 2017 версии найти второе слово (не имя) как-то так
select usr_n,t.* 
from usr x
cross apply (select value, ROW_NUMBER() over (order by (select 1)) rn from string_split(x.usr_n,' ')) t
where t.rn = 2
18 июн 19, 14:52    [21910712]     Ответить | Цитировать Сообщить модератору
 Re: Как вывести только Имя из столбца ФИО  [new]
invm
Member

Откуда: Москва
Сообщений: 8750
andy st,

string_split не гарантирует порядок строк в результируещем наборе.
18 июн 19, 14:58    [21910716]     Ответить | Цитировать Сообщить модератору
 Re: Как вывести только Имя из столбца ФИО  [new]
AlexandrAVG
Member

Откуда:
Сообщений: 9
Сергей Викт.,

Спасибо большое!
18 июн 19, 15:22    [21910730]     Ответить | Цитировать Сообщить модератору
 Re: Как вывести только Имя из столбца ФИО  [new]
iap
Member

Откуда: Москва
Сообщений: 46838
Давным-давно была такая тема: Кто лучше? (Фамилия Имя Отчество - > Фамилия И. О. )
18 июн 19, 15:54    [21910763]     Ответить | Цитировать Сообщить модератору
 Re: Как вывести только Имя из столбца ФИО  [new]
Shakill
Member

Откуда: мск
Сообщений: 1833
invm
andy st,
string_split не гарантирует порядок строк в результируещем наборе.

кстати, серьезный минус. по-хорошему, должно возвращать датасет из двух полей - порядковый номер и собственно куски строки

пользуясь случаем
голосование насчёт string_split
18 июн 19, 16:29    [21910797]     Ответить | Цитировать Сообщить модератору
 Re: Как вывести только Имя из столбца ФИО  [new]
iap
Member

Откуда: Москва
Сообщений: 46838
Shakill
invm
andy st,
string_split не гарантирует порядок строк в результируещем наборе.

кстати, серьезный минус. по-хорошему, должно возвращать датасет из двух полей - порядковый номер и собственно куски строки

пользуясь случаем
голосование насчёт string_split
Тогда надо добавить и разделение символами из набора разделителей.
18 июн 19, 16:37    [21910807]     Ответить | Цитировать Сообщить модератору
 Re: Как вывести только Имя из столбца ФИО  [new]
Alibek B.
Member

Откуда:
Сообщений: 3189
Иногда колхозят через PARSENAME (с предварительном заменой пробелов на точки).
А вообще задача нерешаемая, составляющие имени нужно хранить в отдельных столбцах.
18 июн 19, 16:50    [21910819]     Ответить | Цитировать Сообщить модератору
 Re: Как вывести только Имя из столбца ФИО  [new]
Критик
Member

Откуда: Москва / Калуга
Сообщений: 32146
Блог
Alibek B.,

Зачем?
18 июн 19, 17:02    [21910831]     Ответить | Цитировать Сообщить модератору
 Re: Как вывести только Имя из столбца ФИО  [new]
Alibek B.
Member

Откуда:
Сообщений: 3189
Чтобы иметь возможность вытащить только имя.
18 июн 19, 17:19    [21910864]     Ответить | Цитировать Сообщить модератору
 Re: Как вывести только Имя из столбца ФИО  [new]
Критик
Member

Откуда: Москва / Калуга
Сообщений: 32146
Блог
Alibek B.,

И зачем иметь возможность вытащить только имя?
Пример из первого поста предназначен чисто для обучения.
18 июн 19, 18:07    [21910910]     Ответить | Цитировать Сообщить модератору
 Re: Как вывести только Имя из столбца ФИО  [new]
Alibek B.
Member

Откуда:
Сообщений: 3189
Добрый вечер, %first_name%
лучше чем
Добрый вечер, %last_name%
18 июн 19, 18:19    [21910927]     Ответить | Цитировать Сообщить модератору
 Re: Как вывести только Имя из столбца ФИО  [new]
Критик
Member

Откуда: Москва / Калуга
Сообщений: 32146
Блог
Alibek B.,

"Добрый вечер, ФИО" более корректно.
Потому что лицо, получающее такое письмо, может быть в почтенном возрасте.
18 июн 19, 18:27    [21910933]     Ответить | Цитировать Сообщить модератору
 Re: Как вывести только Имя из столбца ФИО  [new]
andy st
Member

Откуда:
Сообщений: 757
2016+ из запасников stackoverflow
declare @pers table(id int, fio varchar(1000))

insert into @pers select 1, 'Петров Петр Петрович' union all select 2, 'Сидоров Сидор Сидорович' union all select 3, 'Васин Вась Васич' 

select id ,fio
,max(case when [key]=0 then [value] end) Ф
,max(case when [key]=1 then [value] end) И
,max(case when [key]=2 then [value] end) О
from @pers
cross apply openjson('["' + replace(fio,' ','","') + '"]') Z
group by id,fio
18 июн 19, 19:08    [21910957]     Ответить | Цитировать Сообщить модератору
Все форумы / Microsoft SQL Server Ответить