Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > Web программирование > SQL, базы данных
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 28.12.2010, 18:45   #1
NZero
Пользователь
 
Аватар для NZero
 
Регистрация: 16.04.2010
Сообщений: 35
По умолчанию ФИО в сокращенном варианте

Всем привет! Такой вопрос, как в MySql привести ФИО вида " фамилия имя отчество" к виду "фамилия и. о." заранее спасибо!
NZero вне форума Ответить с цитированием
Старый 30.12.2010, 01:57   #2
vovk
!=
Участник клуба
 
Аватар для vovk
 
Регистрация: 08.09.2008
Сообщений: 1,751
По умолчанию

Код:
left([имя], 1)||'.', left([отчество], 1)||'.'
?
vovk вне форума Ответить с цитированием
Старый 30.12.2010, 16:47   #3
XeruH
Форумчанин
 
Регистрация: 17.09.2010
Сообщений: 229
По умолчанию

Цитата:
Сообщение от vovk Посмотреть сообщение
Код:
left([имя], 1)||'.', left([отчество], 1)||'.'
?
Я так понял у него все в одном поле. Тогда всякие Pos(не знаю есть ли он в MySQL) и substring в помощь
Правильно заданный вопрос - половина ответа!
XeruH вне форума Ответить с цитированием
Старый 04.01.2011, 16:50   #4
Linel
Форумчанин
 
Аватар для Linel
 
Регистрация: 21.02.2009
Сообщений: 372
По умолчанию

А зачем в MySQL это делать? Есть 2 варианта:
1) обрабатывать информацию до внесения в БД:
Получаешь: Фамилия Имя Отчество -> Приводишь к: Фамилия И. О. -> Сохраняешь в БД
2) Если же тебе ее могут понадобиться данные в виде: Фамилия Имя Отчество, то делай так:
Получаешь: Фамилия Имя Отчество -> Сохраняешь в БД -> Перед выводом приводишь к: Фамилия И. О.
No name. Just Linel.
Linel вне форума Ответить с цитированием
Старый 05.01.2011, 01:43   #5
XeruH
Форумчанин
 
Регистрация: 17.09.2010
Сообщений: 229
По умолчанию

Цитата:
Сообщение от Linel Посмотреть сообщение
А зачем в MySQL это делать? Есть 2 варианта:
1) обрабатывать информацию до внесения в БД:
Получаешь: Фамилия Имя Отчество -> Приводишь к: Фамилия И. О. -> Сохраняешь в БД
2) Если же тебе ее могут понадобиться данные в виде: Фамилия Имя Отчество, то делай так:
Получаешь: Фамилия Имя Отчество -> Сохраняешь в БД -> Перед выводом приводишь к: Фамилия И. О.
Бывают ситуации когда в азе уже одно поле в котором и Фамилия и Имя и Отчество... а тут вдруг надо вывести в формате как у ТС )
Правильно заданный вопрос - половина ответа!
XeruH вне форума Ответить с цитированием
Старый 10.01.2011, 09:52   #6
vovk
!=
Участник клуба
 
Аватар для vovk
 
Регистрация: 08.09.2008
Сообщений: 1,751
По умолчанию

ну тогда както так
Код:
select   tabl.FIO,
IIF(position(' ' in  TRIM(tabl.FIO)) > 0 ,
(substring(trim(tabl.FIO) from 1 for position(' ' in  TRIM(tabl.FIO))) || substring(trim(tabl.FIO) from position(' ' in  TRIM(tabl.FIO))+1 for 1)) || '.' ||
 IIF(position(' ' in  (substring(trim(tabl.FIO) from position(' ' in  TRIM(tabl.FIO))+1 for (char_length(trim(tabl.FIO)) - position(' ' in  TRIM(tabl.FIO))+1)))) > 0 ,
 ' ' || substring(
 (substring(trim(tabl.FIO) from position(' ' in  TRIM(tabl.FIO))+1 for (char_length(trim(tabl.FIO)) - position(' ' in  TRIM(tabl.FIO))+1))) from
(position(' ' in  (substring(trim(tabl.FIO) from position(' ' in  TRIM(tabl.FIO))+1 for (char_length(trim(tabl.FIO)) - position(' ' in  TRIM(tabl.FIO))+1))))+1) for 1) || '.'
,''),
trim(tabl.FIO))
from tabl
не знаю как для MySq но для Firebird работать должно

ЗЫ а может всётаки разделить поля?
vovk вне форума Ответить с цитированием
Старый 12.01.2011, 09:35   #7
NZero
Пользователь
 
Аватар для NZero
 
Регистрация: 16.04.2010
Сообщений: 35
По умолчанию

спасибо всем!
написал так
Код:
select concat(`sotr`.`surname`,' ',left(`sotr`.`name`,1),'. ',left(`sotr`.`secondname`,1),'.') from sotr
P.S. Linel а для чего представления существуют?

Последний раз редактировалось NZero; 12.01.2011 в 09:38.
NZero вне форума Ответить с цитированием
Старый 12.01.2011, 11:02   #8
vovk
!=
Участник клуба
 
Аватар для vovk
 
Регистрация: 08.09.2008
Сообщений: 1,751
По умолчанию

всётаки первый ответ пригодился))
vovk вне форума Ответить с цитированием
Старый 28.10.2014, 11:26   #9
zehya
Новичок
Джуниор
 
Регистрация: 28.10.2014
Сообщений: 2
Восклицание решение

Уже несколько раз натыкался в гугле на эту тему, но каждый раз разочаровывался в том что нет ответа для моей задачи, которая по описанию топикстартера как раз моя - когда ФИО забиты в одном поле через пробел.
Сделал решение для себя, решил поделиться со всеми:
Код:
select
*,substring(e.fio,1,e.fP-1) as f,
substring(e.fio,e.fP+1,e.iP-e.fP-1) as i,
substring(e.fio,e.iP+1) as o
from (select
locate(' ',fio) as fP,
locate(' ',fio,locate(' ',fio)+1) as iP,
fio
from employees) e
zehya вне форума Ответить с цитированием
Старый 28.10.2014, 16:01   #10
Vapaamies
Ваш К. О.
Участник клуба
 
Аватар для Vapaamies
 
Регистрация: 26.12.2012
Сообщений: 1,770
По умолчанию

В некоторых СУБД у substring может быть больше двух параметров, дающих возможность пропустить n первых/последних вхождений и решить задачу без подзапроса.
Vapaamies вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
База данных ФИО alebed Microsoft Office Excel 13 31.08.2010 09:41
Помогите решить. Или исправте ошибки в моем варианте. ZzMaKSzZ Общие вопросы C/C++ 2 23.12.2009 20:08
Разработать алгоритмы указанных в варианте методов сортировки Lems11 Помощь студентам 1 21.12.2009 18:47
Помогите найти ошибку в простом варианте DLL. vl1639 Общие вопросы Delphi 1 24.10.2009 18:20
Тезки в поле ФИО МартинИ Microsoft Office Access 4 03.05.2009 17:14