Вопрос № 90673: Здраствуйте! помогите пожалуйста!!! Как из ФИО (Иванов Иван Иванович) запросом сформировать 2 столбца(фамилия и имя отчество), и эти два столбца разбить по буквам. То есть в итоге должно быть:
1 столбец: И В А Н О В
2 столбец: И В А Н И...
Вопрос № 90.673
Здраствуйте! помогите пожалуйста!!! Как из ФИО (Иванов Иван Иванович) запросом сформировать 2 столбца(фамилия и имя отчество), и эти два столбца разбить по буквам. То есть в итоге должно быть:
1 столбец: И В А Н О В
2 столбец: И В А Н И В А Н О В И Ч
Отвечает: Виктор Пырлик
Здравствуйте, Кунафина Гульназ Ильдаровна!
Возможно так:
select
substring(fio_pers,1,CHARINDEX(' ',fio_pers,1))as FAM_PERS,
substring(fio_pers,CHARINDEX(' ',fio_pers,1),len(fio_pers)) as NAME_PERS
from pers
где fio_pers - поле ФИО
pers - таблица персонала
FAM_PERS - результат фамилия
NAME_PERS - результат имя отчество
--------- Надо пребывать господа, пребывать! Иначе ничего не получится!
Ответ отправил: Виктор Пырлик (статус: 3-ий класс)
Ответ отправлен: 09.06.2007, 11:15 Оценка за ответ: 4
Отвечает: Sergey T
Здравствуйте, Кунафина Гульназ Ильдаровна!
Этот вариант более точен.
1. Не будет выводится фамилия в поле с именем и отчеством если есть только фамилия.
2. Ну и обрезаются лишние пробелы и вообще не выводится лишняя информация.
3. Не помню уже будет-ли работать такая конструкция в стандарте SQL-92, но на SQL Server 2000 работать будет.
SELECT
LTRIM(SUBSTRING(ФИО, 1, CASE ISNULL(CHARINDEX(' ', LTRIM(ФИО)), 0)
WHEN 0 THEN LEN(ФИО)
ELSE CHARINDEX(' ', LTRIM(ФИО))
END)) AS 'Фамилия',
SUBSTRING(ФИО, ISNULL(CHARINDEX(' ', LTRIM(ФИО)), 0)+1,
CASE ISNULL(CHARINDEX(' ', LTRIM(ФИО)), 0)
WHEN 0 THEN 0
ELSE LEN(ФИО)-CHARINDEX(' ', LTRIM(ФИО))
END) AS 'Имя Отчество'
FROM Таблица
По второму вопросу можно использовать ту же функцию SUBSTRING, но в запросе это сделать невозможно - так как вы не будете знать сколько букв у вас в каждой фамилии. Это делается в циклах WHILE или с помощью курсора.
Удачи.
Ответ отправил: Sergey T (статус: 1-ый класс)
Ответ отправлен: 09.06.2007, 12:21 Оценка за ответ: 4
Отвечает: Игорь Елизаров
Здравствуйте, Кунафина Гульназ Ильдаровна!
не совсем понятна вторая часть вопроса...
зачем надо разбивать по буквам ?
наверное чтобы осуществлять поиск, но это можно сделать командой Like
например select * from table where fio like 'Ан%"
отбирает все фио, которые начинаются на Ан
--------- Пользователь - тоже человек..
Ответ отправил: Игорь Елизаров (статус: Студент)
Ответ отправлен: 09.06.2007, 22:03 Оценка за ответ: 3 Комментарий оценки: по буквам мне надо разбить, так как у меня каждая буква должна хранится
в своей ячейке. Видимо я как то не правильно сформулировала свой вопрос, ч
1090;о меня ни кто не понял.