powered by simpleCommunicator - 2.0.59     © 2025 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / MySQL [игнор отключен] [закрыт для гостей] / Мнемоника для ФИО
3 сообщений из 3, страница 1 из 1
Мнемоника для ФИО
    #39495534
Асланали
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Здравствуйте коллеги!
Возник вопрос.
Как сделать из строки в одном поле Фамилия Имя Отчество строку вида ФАМИЛИЯ_ИО средствами sql?

Есть решение если ФИО в разных полях, но у меня все в одном поле.
Код: sql
1.
2.
3.
4.
5.
6.
7.
8.
9.
concat_ws(
   "_", 
   user_name, 
   concat_ws(
      "", 
      (select LEFT(user_name, 1) from applications), 
      (select LEFT(middle_name, 1) from applications)
   )
)
...
Рейтинг: 0 / 0
Мнемоника для ФИО
    #39495537
Асланали
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Есть решение, но оно для MSSQL.

Код: sql
1.
2.
3.
4.
5.
6.
7.
SELECT [ROW_ID]
      ,[ФИО]	
    ,upper(SUBSTRING (([ФИО]),1,CHARINDEX(' ',[ФИО])-1)+'_'+SUBSTRING (([ФИО]),CHARINDEX(' ',[ФИО])+1,1) +''+
    SUBSTRING (([ФИО]),(CHARINDEX(' ',[ФИО])+CHARINDEX(' ',SUBSTRING (([ФИО]),CHARINDEX(' ',[ФИО])+1,100)))+1,1))
   
  FROM [Карточки регистрации] k
  where k.[ROW_ID] in (908,247,809)
...
Рейтинг: 0 / 0
Мнемоника для ФИО
    #39495919
Фотография MasterZiv
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
АсланалиКак сделать из строки в одном поле Фамилия Имя Отчество строку вида ФАМИЛИЯ_ИО средствами sql?

Есть решение если ФИО в разных полях, но у меня все в одном поле.


Прежде всего, нужно осознать, что это -- нарушение 1-ой нормальной формы, и тебе нужно устранить эту аномалию в твоей БД, т.е.
разделить это одно поле на три. Чем раньше это сделаешь, тем будет лучше.

Решение твоей проблемы в исходном виде тоже есть, на regexp, на substring, но оно не будет работать на 100% всегда, а будет
зависеть от формата данных в поле с ФИО. Соответственно, тебе либо нужно будет этот формат всё время проверять, либо смиряться с тем, что Фамилия ИО не будут вычисляться всегда правильно.


Там будет три выражения,
0) берущее подстроку до первого пробела
1) берущее подстроку за первым пробелом и до следующего
2) берущее подстроку за вторым пробелом и до конца всей строки

Сделать это можно либо путём поиска подстроки в строке и выделения соотв. подстроки, либо можно одним регвыражением распарсить всё и взять три нужные подгруппы (я бы сделал именно так).

Код: plaintext
^\s*(\S+)\s+(\S+)\s+(\S+)\s*$

Все нужные функции в MySQL есть и их можно найти в документации.


Если говорить ещё на более высшем уровне, то прежде всего нужно понимать, что эта формула полного имени -- Фамилия, имя, отчество -- далеко не универсальная, и, в принципе, её не нужно так уж продвигать.

А нужно иметь просто две формы полного имени (два поля) -- полную

Код: plaintext
Иванов Пётр Николаевич
и сокращённую
Код: plaintext
Иванов П.Н.

или

Код: plaintext
Гияс-ад-Дин Абу-ль-Фатх Омар ибн Ибрахим аль-Хайям ан-Нишапури
и
Код: plaintext
Омар Хайям

Но вообще это зависит от предметной области БД
...
Рейтинг: 0 / 0
3 сообщений из 3, страница 1 из 1
Форумы / MySQL [игнор отключен] [закрыт для гостей] / Мнемоника для ФИО
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]