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

Откуда: Москва
Сообщений: 243
Добрый день!
Информация о ФИО сотрудника хранится в одном поле.
Есть задача разделить ФИО на 3 поле.
ФИО разделяются между собой одним пробелом.


CREATE TABLE #t1 (Name varchar(50))
CREATE TABLE #t2 (LastName varchar(50),FirstName varchar(50),MiddleName varchar(50) )

insert into #t1 values ('Петров Сергей Петрович')
insert into #t1 values ('Иванов Иван Сергеевич')



Как реализовать данную задачу?
10 дек 14, 16:26    [16978592]     Ответить | Цитировать Сообщить модератору
 Re: Разделение ФИО  [new]
iap
Member

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

Может, поможет?

Кто лучше? (Фамилия Имя Отчество - > Фамилия И. О. )
10 дек 14, 16:30    [16978631]     Ответить | Цитировать Сообщить модератору
 Re: Разделение ФИО  [new]
BKV88
Member

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

Нашел на форуме такое решение

DECLARE @s varchar(120)
SET @s = 'Иванов Иван Иванович'

SELECT PARSENAME(REPLACE(@s,' ','.'), 1) AS [Фамилия],
       PARSENAME(REPLACE(@s,' ','.'), 2) AS [Имя],
       PARSENAME(REPLACE(@s,' ','.'), 3) AS [Отчество]
10 дек 14, 16:30    [16978635]     Ответить | Цитировать Сообщить модератору
 Re: Разделение ФИО  [new]
Akina
Member

Откуда: Зеленоград, Москва, Россия
Сообщений: 20602
Для поиска пробелов используй CHARINDEX().
Для выбеления нужных элементов SUBSTRING().
10 дек 14, 16:33    [16978662]     Ответить | Цитировать Сообщить модератору
 Re: Разделение ФИО  [new]
a_voronin
Member

Откуда: Москва
Сообщений: 4804
А если "Абдуким ибн Абу Аглы аль Пендаль" встретиться ?
10 дек 14, 16:36    [16978692]     Ответить | Цитировать Сообщить модератору
 Re: Разделение ФИО  [new]
Akina
Member

Откуда: Зеленоград, Москва, Россия
Сообщений: 20602
Такие ФИО должны обрабатываться вручную.
Ещё вариант - написание пользовательской функции, учитывающей подобные "весёлости".
10 дек 14, 16:38    [16978722]     Ответить | Цитировать Сообщить модератору
 Re: Разделение ФИО  [new]
BKV88
Member

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

Таких нет точно)))
10 дек 14, 16:39    [16978726]     Ответить | Цитировать Сообщить модератору
 Re: Разделение ФИО  [new]
BKV88
Member

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

Написал свой код

drop table #t1
drop table #t2

CREATE TABLE #t1 (id int identity not null, Name varchar(50))
CREATE TABLE #t2 (LastName varchar(50),FirstName varchar(50),MiddleName varchar(50) )

insert into #t1 values ('Петров Сергей Петрович')
insert into #t1 values ('Иванов Иван Сергеевич')

DECLARE @str varchar(120)
DECLARE @Name varchar(50)
DECLARE otpr_cursor CURSOR LOCAL FOR

select name from #t1

OPEN otpr_cursor
 
FETCH NEXT FROM otpr_cursor INTO @Name
WHILE @@FETCH_STATUS = 0
BEGIN
select @str=@name

INSERT INTO #t2
SELECT PARSENAME(REPLACE(@str,' ','.'), 3) AS [Фамилия],
       PARSENAME(REPLACE(@str,' ','.'), 2) AS [Имя],
       PARSENAME(REPLACE(@str,' ','.'), 1) AS [Отчество]
       
FETCH NEXT FROM otpr_cursor INTO @Name
 END
CLOSE otpr_cursor
DEALLOCATE otpr_cursor       
       
select * from #t2
10 дек 14, 16:51    [16978820]     Ответить | Цитировать Сообщить модератору
 Re: Разделение ФИО  [new]
iap
Member

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

не понял, а курсор-то тут зачем?!
10 дек 14, 16:52    [16978837]     Ответить | Цитировать Сообщить модератору
 Re: Разделение ФИО  [new]
Konst_One
Member

Откуда:
Сообщений: 11538
зачем столько кода, там одного INSERT достаточно
10 дек 14, 16:53    [16978848]     Ответить | Цитировать Сообщить модератору
 Re: Разделение ФИО  [new]
iap
Member

Откуда: Москва
Сообщений: 47001
Konst_One
зачем столько кода, там одного INSERT достаточно
Это слишком быстро будет
10 дек 14, 16:56    [16978869]     Ответить | Цитировать Сообщить модератору
 Re: Разделение ФИО  [new]
BKV88
Member

Откуда: Москва
Сообщений: 243
Хм что-то я погорячился



INSERT INTO #t2
SELECT PARSENAME(REPLACE(Name,' ','.'), 3) AS [Фамилия],
       PARSENAME(REPLACE(Name,' ','.'), 2) AS [Имя],
       PARSENAME(REPLACE(Name,' ','.'), 1) AS [Отчество]
from #t1  
10 дек 14, 16:58    [16978888]     Ответить | Цитировать Сообщить модератору
 Re: Разделение ФИО  [new]
babona
Member [заблокирован]

Откуда: Батуринск
Сообщений: 1816
эх, школьные примеры :)

а если встретится:
Иван Сергеевич Крылов
И. С. Крылов
Doro Gerdt
и прочие случаи.

Как будете расфасовывать где имя, где фамилия?
10 дек 14, 21:41    [16980437]     Ответить | Цитировать Сообщить модератору
Все форумы / Microsoft SQL Server Ответить