Форум программистов, компьютерный форум, киберфорум
Microsoft Access
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.69/35: Рейтинг темы: голосов - 35, средняя оценка - 4.69
36 / 34 / 13
Регистрация: 03.06.2010
Сообщений: 215

Работа с подстроками: разбить таблицу FIO, на таблицы: F -фамилия, I - имя, O - отчество

22.04.2013, 19:16. Показов 7466. Ответов 12
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
В общем имеется БД, в ней таблица с информацией о людях, и столбец/поле - FIO, где фамилия имя отчество записаны через пробел, в одной ячейки!!
Как по-средствам MS access можно разбить таблицу FIO, на таблицы: F -фамилия, I - имя, O - отчество?

SQL
1
2
3
[CREATE TABLE I AS]
SELECT SUBSTR(FIO,0, STRPOS(FIO,' ')) AS I
FROM FIO;
Это на скидку, access совершенно не воспринимает SUBSTR и STRPOS..
0
Лучшие ответы (1)
IT_Exp
Эксперт
34794 / 4073 / 2104
Регистрация: 17.06.2006
Сообщений: 32,602
Блог
22.04.2013, 19:16
Ответы с готовыми решениями:

Необходимо сделать одним полем Фамилия полностью а имя и отчество только инициалы
Дан запрос в нем поля Фамилия, Имя, отчество. Необходимо сделать одним полем Фамилия полностью а имя и отчество только инициалы. Сделала...

С клавиатуры вводится строка "Фамилия Имя Отчество". Изменить вывод строки на "Имя Отчество Фамилия"
С клавиатуры вводится строка "Фамилия Имя Отчество". Изменить вывод строки на "Имя Отчество Фамилия".

Строку в формате "фамилия, имя, отчество" преобразовать в формат "имя, отчество, фамилия"
последовательность содержит Ваша фамилия, имя, отчество. Превратить ее таким образом, чтобы сначала данные были размещены в следующем...

12
Модератор
Эксперт MS Access
 Аватар для shanemac51
12231 / 5078 / 814
Регистрация: 07.08.2010
Сообщений: 14,941
Записей в блоге: 4
22.04.2013, 19:33
попробуйте MID(STROKA,NACH,DLINA)
0
36 / 34 / 13
Регистрация: 03.06.2010
Сообщений: 215
22.04.2013, 19:49  [ТС]
Цитата Сообщение от shanemac51 Посмотреть сообщение
попробуйте MID(STROKA,NACH,DLINA)
Побывал, но как определить конец подстроки если концом является пробел (" ") ?
0
Эксперт MS Access
 Аватар для ltv_1953
17536 / 7288 / 1663
Регистрация: 21.06.2012
Сообщений: 13,957
22.04.2013, 21:10
Если в запросе, то фамилию и имя можно так
SQL
1
LEFT([ФИО],InStr(1,[ФИО]," ")-1) AS Фамилия, Mid([ФИО],InStr(1,[ФИО]," ")+1,InStr(InStr(1,[ФИО]," ")+1,[ФИО]," ")-InStr(1,[ФИО]," ")-1) AS Имя
Отчество по аналогии.
1
Эксперт MS Access
26827 / 14507 / 3192
Регистрация: 28.04.2012
Сообщений: 15,782
22.04.2013, 21:27
Не люблю длинные разборы строк :-)
Если вы работаете в самом акцессе, то попробуйте вариант с одной таблицей для всех ингредиентов ФИО
Запрос
SQL
1
2
SELECT fsub(fio, 0) AS Ф, fsub(fio, 1) AS И, fsub(fio, 2) AS О INTO FIO
FROM Таблица
Публичная функция в общем модуле
Visual Basic
1
2
3
4
5
6
7
8
9
10
11
12
13
14
Public function fsub(fio, n)
  dim p
  p=split(fio, " ")
  select case ubound(p)
    case 1
      redim Preserve p(2)
      p(2)=""
    case 2
      redim Preserve p(2)
      p(1)="" 
      p(2)=""  
  end select
  fsub=p(n)
end function
0
3544 / 1118 / 94
Регистрация: 13.03.2011
Сообщений: 1,513
22.04.2013, 22:41
Лучший ответ Сообщение было отмечено как решение

Решение

Цитата Сообщение от mobile Посмотреть сообщение
Публичная функция в общем модуле
Вместо case 2 должно быть case 0

Вариант немного покороче
Visual Basic
1
2
3
4
5
Public Function fsub(fio, n)
  Dim p
  p = Split(fio, " ")
  If UBound(p) < n Then fsub = "" Else fsub = p(n)
End Function
4
 Аватар для Андрэич
2842 / 774 / 41
Регистрация: 20.05.2012
Сообщений: 2,055
23.04.2013, 00:16
В объединённой строке фио может быть и 4, и даже, наверное, пять слов, разделённых (по ошибке оператора или нет) пробелами:
Василий али баба Алибабаевич Иванов...
(Извиняюсь, если перековеркал имена, не знаю тюркских языков...)
0
3544 / 1118 / 94
Регистрация: 13.03.2011
Сообщений: 1,513
23.04.2013, 00:57
Цитата Сообщение от Андрэич Посмотреть сообщение
В объединённой строке фио может быть и 4, и даже, наверное, пять слов, разделённых (по ошибке оператора или нет) пробелами:
Василий али баба Алибабаевич Иванов...
По затронутому вопросу уже столько говорено-переговорено, до оскомины.
Но отмечу, что Функция справится и с такой бедой

fio="Василий али баба Алибабаевич Иванов"
?fsub(fio, 0)
Василий
?fsub(fio, 1)
али
?fsub(fio, 2)
баба
?fsub(fio, 3)
Алибабаевич
?fsub(fio, 4)
Иванов
2
Эксперт MS Access
2841 / 1381 / 217
Регистрация: 13.05.2011
Сообщений: 4,224
13.05.2013, 19:29
ltv_1953
Перекрутил много с отчеством, что-то получается, но не то. То что пробовал не выкладываю - стыдно. Может продемонстрируете?

Точнее я хотел сделать из Фамилия Имя Отчество - И.О. Фамилия

вот каким способом:Mid([Начальник_ЦТР];InStr(1;[Начальник_ЦТР];" ")+1;InStr(InStr(1;[Начальник_ЦТР];" ")+1;[Начальник_ЦТР];" ")-InStr(1;[Начальник_ЦТР];" ")-1) & " " & Right([Начальник_ЦТР];InStr(1;[Начальник_ЦТР];" ")+2) & " " & Left([Начальник_ЦТР];InStr(1;[Начальник_ЦТР];" ")-1)

Тут И. - нормально, О. - криво, Фамилия - нормально.

Добавлено через 10 минут
Я сделал так:
SQL
1
LEFT(Mid([Начальник_ЦТР];InStr(1;[Начальник_ЦТР];" ")+1;InStr(InStr(1;[Начальник_ЦТР];" ")+1;[Начальник_ЦТР];" ")-InStr(1;[Начальник_ЦТР];" ")-1);1) & "." & LEFT(RIGHT([Начальник_ЦТР];InStr(1;[Начальник_ЦТР];" ")+2);1) & ". " & LEFT([Начальник_ЦТР];InStr(1;[Начальник_ЦТР];" ")-1)
Надо, чтобы из Фамилия Имя Отчество получилось И.О. Фамилия
В моем написании отчество как-то искривляется.
Спасибо!

Добавлено через 13 минут
На при разные поля [Фамилия], [Имя], [Отчество] делится хорошо.
0
3544 / 1118 / 94
Регистрация: 13.03.2011
Сообщений: 1,513
13.05.2013, 19:37
Цитата Сообщение от Вячеслав Я Посмотреть сообщение
Надо, чтобы из Фамилия Имя Отчество получилось И.О. Фамилия
Используйте функцию fsub, "дешевле" обойдется.
Пример
Visual Basic
1
2
3
fio="Пушкин Александр Сергеевич"
?Left(fsub(fio, 1),1) & "." & Left(fsub(fio, 2),1) & ". " & fsub(fio, 0)
А.С. Пушкин
1
 Аватар для kniga
5 / 5 / 0
Регистрация: 21.05.2013
Сообщений: 108
14.02.2020, 09:29
Подскажите, пж, по функции fsub . Если в одной записи есть значение в поле fio, а в другой null, то что дописать в коде?
Пробовал
If IsNull (reports!report!fio) Then Exit function - не помогает
0
Эксперт MS Access
 Аватар для alvk
7459 / 4592 / 302
Регистрация: 12.08.2011
Сообщений: 14,380
14.02.2020, 11:52
Цитата Сообщение от kniga Посмотреть сообщение
то что дописать в коде?
ну конечно же проверку на null и потом функцию, иначе выход из sub
0
 Аватар для amd48
845 / 475 / 80
Регистрация: 18.05.2016
Сообщений: 1,267
Записей в блоге: 5
18.02.2020, 14:18
VB.NET
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
Function RX(ByRef str As String, sPattern As String, sReplace As String, sMatches As Object) As String
Dim objRegExp As Object
Dim objMatch As Object
Dim objMatches As Object
Dim i As Integer
RX = str
Set objRegExp = CreateObject("VBScript.RegExp")
objRegExp.Global = True
objRegExp.IgnoreCase = True
objRegExp.Pattern = sPattern
Set objMatches = objRegExp.Execute(str)
Set sMatches = objRegExp.Execute(str)
For i = 0 To objMatches.count - 1
    Set objMatch = objMatches.item(i)
    RX = objRegExp.Replace(str, sReplace)
Next
End Function
 
Public Function fFio(sFIO As String, i As Byte) As String
On Error Resume Next
Dim objMatches As Object
Call RX(sFIO, "([А-ЯЁ][а-яё]+[\-\s]?)", "", objMatches)
If objMatches.count > 0 Then
    fFio = objMatches(i)
End If
End Function
SQL
1
2
SELECT ФИО,ffio(ФИО,0) AS фамилия,ffio(фио,1) AS имя,ffio(фио,2) AS отчество
FROM таблица
1
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
BasicMan
Эксперт
29316 / 5623 / 2384
Регистрация: 17.02.2009
Сообщений: 30,364
Блог
18.02.2020, 14:18
Помогаю со студенческими работами здесь

Дана строка вида «Фамилия Имя Отчество». Получить строку вида Имя Отчество
Дана строка вида «Фамилия Имя Отчество». Получить строку вида Имя Отчество

В строке s1 записаны фамилия имя отчество. Необходимо вывести фамилия и инициалы
в строке s1 записаны фамилия имя отчество. Необходимо вывести фамилия и инициалы. Как это можно сделать? помогите пожалуйтса!

Ввести в одной строке фамилию, имя и отчество. Вывести, где останутся имя и фамилия
Пример: Введите ФИО: Пупкин Василий Иванович Результат: Привет, Василий Пупкин! ...

Ввести в окне имя, отчество и фамилию (именно в таком порядке) и преобразовать, чтобы получилось имя и фамилия
Нужно написать программу чтобы она умела: Ввести в окне имя, отчество и фамилию (именно в таком порядке) и преобразовать, чтобы...

Имеется список студентов с информацией: фамилия, имя, отчество, пол, возраст и курс. Определить самое распространенное мужское и женское имя.
Условия задачи: Имеется список студентов с информацией: фамилия, имя, отчество, пол, возраст и курс. Определить самое распространенное...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
13
Ответ Создать тему
Новые блоги и статьи
Вывод диалогового окна перед закрытием, если документ не проведён
Maks 04.04.2026
Алгоритм из решения ниже реализован на примере нетипового документа "СписаниеМатериалов", разработанного в конфигурации КА2. Задача: реализовать программный контроль на предмет проведения документа. . .
Программный контроль заполнения реквизита табличной части документа
Maks 02.04.2026
Алгоритм из решения ниже реализован на примере нетипового документа "СписаниеМатериалов", разработанного в конфигурации КА2. Задача: реализовать контроль заполнения реквизита "ПричинаСписания". . .
wmic не является внутренней или внешней командой
Maks 02.04.2026
Решение: DISM / Online / Add-Capability / CapabilityName:WMIC~~~~ Отсюда: https:/ / winitpro. ru/ index. php/ 2025/ 02/ 14/ komanda-wmic-ne-naydena/
Программная установка даты и запрет ее изменения
Maks 02.04.2026
Алгоритм из решения ниже реализован на примере нетипового документа "СписаниеМатериалов", разработанного в конфигурации КА2. Задача: при создании документов установить период списания автоматически. . .
Вывод данных в справочнике через динамический список
Maks 01.04.2026
Реализация из решения ниже выполнена на примере нетипового справочника "Спецтехника" разработанного в конфигурации КА2. Задача: вывести данные из ТЧ нетипового документа. . .
Программное заполнения текстового поля в реквизите формы документа
Maks 01.04.2026
Алгоритм из решения ниже реализован на нетиповом документе "ВыдачаОборудованияНаСпецтехнику" разработанного в конфигурации КА2, в дополнении к предыдущему решению. На форме документа создается. . .
К слову об оптимизации
kumehtar 01.04.2026
Вспоминаю начало 2000-х, университет, когда я писал на Delphi. Тогда среди программистов на форумах активно обсуждали аккуратную работу с памятью: нужно было следить за переменными, вовремя. . .
Идея фильтра интернета (сервер = слой+фильтр).
Hrethgir 31.03.2026
Суть идеи заключается в том, чтобы запустить свой сервер, о чём я если честно мечтал давно и давно приобрёл книгу как это сделать. Но не было причин его запускать. Очумелые учёные напечатали на. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru