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

Откуда: СПб
Сообщений: 143
На Oracle могу сделать запросто, а в MS SQL опыта чуть-чуть... INSTR здесь нету :(
25 июл 13, 11:53    [14615271]     Ответить | Цитировать Сообщить модератору
 Re: Из "Фамилия Имя Отчество" получить "Фамилия И.О."  [new]
iap
Member

Откуда: Москва
Сообщений: 47083
Кто лучше? (Фамилия Имя Отчество - > Фамилия И. О. )
25 июл 13, 11:55    [14615284]     Ответить | Цитировать Сообщить модератору
 Re: Из "Фамилия Имя Отчество" получить "Фамилия И.О."  [new]
Гость333
Member

Откуда:
Сообщений: 3683
bev
INSTR здесь нету :(

Есть CHARINDEX, правда, он ищет только первое вхождение подстроки. Но вам, судя по всему, нужны "первый пробел" и "второй пробел", так что это не проблема.
25 июл 13, 12:02    [14615343]     Ответить | Цитировать Сообщить модератору
 Re: Из "Фамилия Имя Отчество" получить "Фамилия И.О."  [new]
Сергей Викт.
Member

Откуда: Москва
Сообщений: 888
bev
На Oracle могу сделать запросто, а в MS SQL опыта чуть-чуть... INSTR здесь нету :(

Решение "в лоб":
declare @a varchar(256) 
SET @a='Фамилия Имя Отчество'
SELECT LEFT(@a,CHARINDEX(' ',@a))+LEFT(RIGHT(@a,LEN(@a)-CHARINDEX(' ',@a)),1)+'.'+ LEFT(RIGHT(RIGHT(@a,LEN(@a)-CHARINDEX(' ',@a)),LEN(RIGHT(@a,LEN(@a)-CHARINDEX(' ',@a)))-CHARINDEX(' ',RIGHT(@a,LEN(@a)-CHARINDEX(' ',@a)))),1)+'.'
25 июл 13, 12:10    [14615412]     Ответить | Цитировать Сообщить модератору
 Re: Из "Фамилия Имя Отчество" получить "Фамилия И.О."  [new]
Minamoto
Member

Откуда: Москва
Сообщений: 1162
Сергей Викт.
bev
На Oracle могу сделать запросто, а в MS SQL опыта чуть-чуть... INSTR здесь нету :(

Решение "в лоб":
declare @a varchar(256) 
SET @a='Фамилия Имя Отчество'
SELECT LEFT(@a,CHARINDEX(' ',@a))+LEFT(RIGHT(@a,LEN(@a)-CHARINDEX(' ',@a)),1)+'.'+ LEFT(RIGHT(RIGHT(@a,LEN(@a)-CHARINDEX(' ',@a)),LEN(RIGHT(@a,LEN(@a)-CHARINDEX(' ',@a)))-CHARINDEX(' ',RIGHT(@a,LEN(@a)-CHARINDEX(' ',@a)))),1)+'.'


SET @a='Ибн Си́на Абу́ Али́ Хусе́йн ибн Абдалла́х'

Чет не прокатывает :(
25 июл 13, 12:22    [14615475]     Ответить | Цитировать Сообщить модератору
 Re: Из "Фамилия Имя Отчество" получить "Фамилия И.О."  [new]
Сергей Викт.
Member

Откуда: Москва
Сообщений: 888
Minamoto
Сергей Викт.
пропущено...

Решение "в лоб":
declare @a varchar(256) 
SET @a='Фамилия Имя Отчество'
SELECT LEFT(@a,CHARINDEX(' ',@a))+LEFT(RIGHT(@a,LEN(@a)-CHARINDEX(' ',@a)),1)+'.'+ LEFT(RIGHT(RIGHT(@a,LEN(@a)-CHARINDEX(' ',@a)),LEN(RIGHT(@a,LEN(@a)-CHARINDEX(' ',@a)))-CHARINDEX(' ',RIGHT(@a,LEN(@a)-CHARINDEX(' ',@a)))),1)+'.'


SET @a='Ибн Си́на Абу́ Али́ Хусе́йн ибн Абдалла́х'

Чет не прокатывает :(

странно, да? А должно бы...
Как поставлена задача, так и решена, не?
25 июл 13, 12:37    [14615584]     Ответить | Цитировать Сообщить модератору
 Re: Из "Фамилия Имя Отчество" получить "Фамилия И.О."  [new]
Гость333
Member

Откуда:
Сообщений: 3683
Сергей Викт.
Решение "в лоб":
declare @a varchar(256) 
SET @a='Фамилия Имя Отчество'
SELECT LEFT(@a,CHARINDEX(' ',@a))+LEFT(RIGHT(@a,LEN(@a)-CHARINDEX(' ',@a)),1)+'.'+ LEFT(RIGHT(RIGHT(@a,LEN(@a)-CHARINDEX(' ',@a)),LEN(RIGHT(@a,LEN(@a)-CHARINDEX(' ',@a)))-CHARINDEX(' ',RIGHT(@a,LEN(@a)-CHARINDEX(' ',@a)))),1)+'.'

Много букв, не осилил.
Почему, например, не так?
declare @a varchar(256) 
SET @a='Фамилия Имя Отчество'
SELECT LEFT(@a,CHARINDEX(' ',@a) + 1) + '.' + SUBSTRING(@a, CHARINDEX(' ',@a,CHARINDEX(' ',@a) + 1) + 1, 1) + '.'
25 июл 13, 12:44    [14615629]     Ответить | Цитировать Сообщить модератору
 Re: Из "Фамилия Имя Отчество" получить "Фамилия И.О."  [new]
Сергей Викт.
Member

Откуда: Москва
Сообщений: 888
Гость333
Сергей Викт.
Решение "в лоб":
declare @a varchar(256) 
SET @a='Фамилия Имя Отчество'
SELECT LEFT(@a,CHARINDEX(' ',@a))+LEFT(RIGHT(@a,LEN(@a)-CHARINDEX(' ',@a)),1)+'.'+ LEFT(RIGHT(RIGHT(@a,LEN(@a)-CHARINDEX(' ',@a)),LEN(RIGHT(@a,LEN(@a)-CHARINDEX(' ',@a)))-CHARINDEX(' ',RIGHT(@a,LEN(@a)-CHARINDEX(' ',@a)))),1)+'.'

Много букв, не осилил.
Почему, например, не так?
declare @a varchar(256) 
SET @a='Фамилия Имя Отчество'
SELECT LEFT(@a,CHARINDEX(' ',@a) + 1) + '.' + SUBSTRING(@a, CHARINDEX(' ',@a,CHARINDEX(' ',@a) + 1) + 1, 1) + '.'

Так намного лучше) Кто ж спорит. Мне лень было думать, честно честно))
25 июл 13, 12:53    [14615720]     Ответить | Цитировать Сообщить модератору
 Re: Из "Фамилия Имя Отчество" получить "Фамилия И.О."  [new]
iap
Member

Откуда: Москва
Сообщений: 47083
Почему бы не сходить по ссылке и не взять готовое решение-баян?!

Правда, всякие "Полад Муртуза-оглы Мамедов" всё равно трудно обработать
25 июл 13, 12:56    [14615733]     Ответить | Цитировать Сообщить модератору
 Re: Из "Фамилия Имя Отчество" получить "Фамилия И.О."  [new]
Minamoto
Member

Откуда: Москва
Сообщений: 1162
Сергей Викт.
Minamoto
пропущено...


SET @a='Ибн Си́на Абу́ Али́ Хусе́йн ибн Абдалла́х'

Чет не прокатывает :(

странно, да? А должно бы...
Как поставлена задача, так и решена, не?

Не.
Никто не говорил, что в фамилии не может быть пробелов ;)
25 июл 13, 12:57    [14615742]     Ответить | Цитировать Сообщить модератору
 Re: Из "Фамилия Имя Отчество" получить "Фамилия И.О."  [new]
iap
Member

Откуда: Москва
Сообщений: 47083
Minamoto
Сергей Викт.
пропущено...

странно, да? А должно бы...
Как поставлена задача, так и решена, не?

Не.
Никто не говорил, что в фамилии не может быть пробелов ;)
Бывают двойные фамилии через дефис
и целое множество имён через пробел (Киркорова Алла Виктория Филлиповна!)
25 июл 13, 13:00    [14615755]     Ответить | Цитировать Сообщить модератору
 Re: Из "Фамилия Имя Отчество" получить "Фамилия И.О."  [new]
Сергей Викт.
Member

Откуда: Москва
Сообщений: 888
Minamoto
Сергей Викт.
пропущено...

странно, да? А должно бы...
Как поставлена задача, так и решена, не?

Не.
Никто не говорил, что в фамилии не может быть пробелов ;)

Ну так задача поставлена как?:)
ТС
Из "Фамилия Имя Отчество" получить "Фамилия И.О."


Я и предложил решение "в лоб" о чем и сообщил.
Если б стоял вопрос об обработке неких Бюль-Бюль Оглы Архан Ибн Сали Ахметович, то другой коленкор)
25 июл 13, 13:00    [14615761]     Ответить | Цитировать Сообщить модератору
 Re: Из "Фамилия Имя Отчество" получить "Фамилия И.О."  [new]
Гость333
Member

Откуда:
Сообщений: 3683
iap
Почему бы не сходить по ссылке и не взять готовое решение-баян?!

Свой велосипед ближе к телу :)
Даже если он ломается, скажем, если вместо одного пробела между "Фамилия" и "Имя" поставить два пробела.
25 июл 13, 13:24    [14615923]     Ответить | Цитировать Сообщить модератору
 Re: Из "Фамилия Имя Отчество" получить "Фамилия И.О."  [new]
iap
Member

Откуда: Москва
Сообщений: 47083
Гость333
iap
Почему бы не сходить по ссылке и не взять готовое решение-баян?!

Свой велосипед ближе к телу :)
Даже если он ломается, скажем, если вместо одного пробела между "Фамилия" и "Имя" поставить два пробела.
Разве два пробела там неправильно обрабатываются?
И ссылка на удаление всех пробелов, идущих подряд, кроме одного, там даётся.

Ээээ! Зачем обижаешь, слюшай, а?
25 июл 13, 13:31    [14615986]     Ответить | Цитировать Сообщить модератору
 Re: Из "Фамилия Имя Отчество" получить "Фамилия И.О."  [new]
Cygapb-007
Member

Откуда:
Сообщений: 1677
да о чем вы спорите?
объявить виновным того, кто при вводе данных не попал в формат - и все, и париться не надо
25 июл 13, 13:58    [14616178]     Ответить | Цитировать Сообщить модератору
 Re: Из "Фамилия Имя Отчество" получить "Фамилия И.О."  [new]
Гость333
Member

Откуда:
Сообщений: 3683
iap
Разве два пробела там неправильно обрабатываются?
И ссылка на удаление всех пробелов, идущих подряд, кроме одного, там даётся.

Ээээ! Зачем обижаешь, слюшай, а?

Ээээ... я про свой "гамнакодный лисапед" 14615629, написанный по мотивам творчества Сергей Викт.
В продакшен-то, понятно, такое у меня ни в жисть не пойдёт :)
25 июл 13, 14:22    [14616354]     Ответить | Цитировать Сообщить модератору
Все форумы / Microsoft SQL Server Ответить