Страница: 1 |
Страница: 1 |
Вопрос: Возврат первых букв имени и отчества
Добавлено: 10.12.07 16:13
Автор вопроса: alexfor
Привет Всем!
В таблице бд есть поле name, в которое пишется: Иванов Иван Иванович. Для определенной процедуры необходимо сформировать этот name в таком виде: Иванов И.И. и поместить в другое поле.
Заранее спасибо!
Ответы
Всего ответов: 12
Номер ответа: 1
Автор ответа:
Winand
Вопросов: 87
Ответов: 2795
Web-сайт:
Профиль | | #1
Добавлено: 10.12.07 20:45
а на чем? на vb что ли?
Dim fName(1 To 3) As Long
fName(1) = InStr(1, str, " " - 1 'Фамилия
fName(2) = InStr(1, str, " " + 1 'Имя
fName(3) = InStrRev(str, " " + 1 'Отчество
Debug.Print Mid(str, 1, fName(1)) & " " & Mid(str, fName(2), 1) & "." & Mid(str, fName(3), 1) & "."
Номер ответа: 2
Автор ответа:
astoro
ICQ: 649109
Вопросов: 31
Ответов: 391
Профиль | | #2
Добавлено: 11.12.07 09:06
мона еще так
Const str As String = "Иванов Иван Иванович"
Dim fName(1 To 3) As Long
fName(1) = Split(str, " "(0) 'Фамилия
fName(2) = Split(str, " "(1) 'Имя
fName(3) = Split(str, " "(2) 'Отчество
Debug.Print Mid(str, 1, fName(1)) & " " & Mid(str, fName(2), 1) & "." & Mid(str, fName(3), 1) & "."
Номер ответа: 3
Автор ответа:
astoro
ICQ: 649109
Вопросов: 31
Ответов: 391
Профиль | | #3
Добавлено: 11.12.07 09:07
тьфу debug.print забыл поправить
в общем в массиву будут первые буквы Ф.И.О.
Номер ответа: 4
Автор ответа:
alexfor
Вопросов: 28
Ответов: 68
Профиль | | #4
Добавлено: 11.12.07 09:17
Забавно, а если в таблице не одна тысяча записей?
Номер ответа: 5
Автор ответа:
Sur
ICQ: 1249088
Вопросов: 10
Ответов: 304
Web-сайт:
Профиль | | #5
Добавлено: 11.12.07 10:26
>Забавно, а если в таблице не одна тысяча записей?
Тогда имело смысл разносить фио в базе по трем полям?
Номер ответа: 6
Автор ответа:
alexfor
Вопросов: 28
Ответов: 68
Профиль | | #6
Добавлено: 11.12.07 10:52
Привет, да именно так надо и делать, БД создана ранее, не мной, нужно как-то выйти из положения
Номер ответа: 7
Автор ответа:
astoro
ICQ: 649109
Вопросов: 31
Ответов: 391
Профиль | | #7
Добавлено: 11.12.07 11:12
добавь в бд нужные колонки и проведи процедуру один раз
немного погодишь, зато все будет гут
Номер ответа: 8
Автор ответа:
alexfor
Вопросов: 28
Ответов: 68
Профиль | | #8
Добавлено: 11.12.07 11:21
Сенькс, попробую разбить
Номер ответа: 9
Автор ответа:
alexfor
Вопросов: 28
Ответов: 68
Профиль | | #9
Добавлено: 11.12.07 11:22
, хотя может как-то копать от пробелов?
Номер ответа: 10
Автор ответа:
Mr.Smile
ICQ: 427682013
Вопросов: 14
Ответов: 464
Профиль | | #10
Добавлено: 11.12.07 11:38
Первый ответ чем не устраивает?
Номер ответа: 11
Автор ответа:
AL
Вопросов: 7
Ответов: 21
Профиль | | #11
Добавлено: 11.12.07 16:34
Вот такая хрень на SQL (ORACLE). Может не оч. рационально, но зато работает!!
select substr(ИМЯ,1,instr(ИМЯ,' ',1,1)-1) || ' ' || substr(ИМЯ,instr(ИМЯ,' ',1,1)+1,1) || '. ' ||substr(substr(ИМЯ,instr(ИМЯ,' ',1,1)+1),instr(substr(ИМЯ,instr(ИМЯ,' ',1,1)+1),' ',1,1)+1,1) || '.'
from ТАБЛИЦА
Номер ответа: 12
Автор ответа:
Winand
Вопросов: 87
Ответов: 2795
Web-сайт:
Профиль | | #12
Добавлено: 12.12.07 02:19
Да, я что-то протупил) astoro прав я думаю. Хотя я лично не знаю как быстрее. Может Split очень медленный..
Только вот использовать его 3! раза эт уж точно чересчур))
Dim fName() As String
fName = Split(str, " "
Debug.Print fName(0) & " " & Left(fName(1), 1) & "." & Left(fName(2), 1) & "."