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

Откуда:
Сообщений: 202
есть запись типа
Иванов Иван Иванович в 1 поле
я разбиваю на 3 поля но с условием что между ними по 1 пробелу

вот так

select manager,substring(manager,1,charindex(' ',manager)-1),
substring(manager,charindex(' ',manager)+1,charindex(' ',substring(manager,charindex(' ',manager)+1,len(manager)))),
substring(substring(manager,charindex(' ',manager)+1,len(manager)),charindex(' ',substring(manager,charindex(' ',manager)+1,len(manager)))+1,len(manager)),
Tel from Table_t

вопрос-как сделать разбиение если между словами будет по 2 или 3 пробела?
23 ноя 11, 11:09    [11642632]     Ответить | Цитировать Сообщить модератору
 Re: разбитие ФИО на 3 поля  [new]
SomewhereSomehow
Member

Откуда: Moscow
Сообщений: 2480
Блог
Neumexa,

https://www.sql.ru/forum/actualthread.aspx?tid=750850&hl=%f4%e8%ee%20%f0%e0%f1%ef%e0%f0%f1%e8%f2%fc
https://www.sql.ru/forum/actualthread.aspx?tid=621966
23 ноя 11, 11:12    [11642651]     Ответить | Цитировать Сообщить модератору
 Re: разбитие ФИО на 3 поля  [new]
alexeyvg
Member

Откуда: Moscow
Сообщений: 31960
Neumexa
вопрос-как сделать разбиение если между словами будет по 2 или 3 пробела?
Например, используя replace привести все разделители к стандартному виду:
select manager,substring(manager,1,charindex(' ',manager)-1),
substring(manager,charindex(' ',manager)+1,charindex(' ',substring(manager,charindex(' ',manager)+1,len(manager)))),
substring(substring(manager,charindex(' ',manager)+1,len(manager)),charindex(' ',substring(manager,charindex(' ',manager)+1,len(manager)))+1,len(manager)),
Tel from ( select replace(manager, '  ', ' ') Tel from Table_t) t
23 ноя 11, 11:13    [11642662]     Ответить | Цитировать Сообщить модератору
 Re: разбитие ФИО на 3 поля  [new]
Neumexa
Member

Откуда:
Сообщений: 202
alexeyvg
Neumexa
вопрос-как сделать разбиение если между словами будет по 2 или 3 пробела?
Например, используя replace привести все разделители к стандартному виду:
select manager,substring(manager,1,charindex(' ',manager)-1),
substring(manager,charindex(' ',manager)+1,charindex(' ',substring(manager,charindex(' ',manager)+1,len(manager)))),
substring(substring(manager,charindex(' ',manager)+1,len(manager)),charindex(' ',substring(manager,charindex(' ',manager)+1,len(manager)))+1,len(manager)),
Tel from ( select replace(manager, '  ', ' ') Tel from Table_t) t


точно как я сам не догадался.

кому надо

update Table_t set  manager = replace(manager,'   ',' ')
update Table_t set  manager = replace(manager,'  ',' ')
23 ноя 11, 11:19    [11642717]     Ответить | Цитировать Сообщить модератору
 Re: разбитие ФИО на 3 поля  [new]
grigrim
Member

Откуда: Москва
Сообщений: 89
Neumexa
кому надо

update Table_t set  manager = replace(manager,'   ',' ')
update Table_t set  manager = replace(manager,'  ',' ')

Ваше решение неправильно работает, если есть 5 или больше 7 подряд идущих пробелов между словами.
Так надёжнее будет:
UPDATE Table_t SET manager = REPLACE (REPLACE (REPLACE (LTRIM (RTRIM (manager) ), ' ', ' #'), '# ', '#'), '#', '')
Срабатывает на любом количестве пробелов.
23 ноя 11, 11:57    [11643110]     Ответить | Цитировать Сообщить модератору
Все форумы / Microsoft SQL Server Ответить