|
Модераторы: Akella |
|
password |
|
||||
Шустрый Профиль Группа: Участник Сообщений: 76 Регистрация: 23.9.2008 Где: Украина, Сумы Репутация: нет Всего: 8 |
Добрый вечер.
Вопрос знатокам. База FireBird 2.5 Таблица (назовём её например reg_doc) имеет значения:
FIO могут быть как через пробел (наиболее встречаемый вариант), но могут быть сокращенно через "." Для определенной выгрузки данных нужно разбить FIO на Фамилию, Имя, Отчество по отдельным столбцам. Немного посидел написал такой sql. Можно ли его немного упростить, или данный вариант оптимальный?
|
||||
|
|||||
xackera |
|
|||
Новичок Профиль Группа: Участник Сообщений: 42 Регистрация: 17.6.2008 Где: USSR Репутация: нет Всего: нет |
Вариант вроде нормальный. Но что мешало сделать разбивку ФИО на три поля и уже в запросе их склеивать в одно?
|
|||
|
||||
Akina |
|
|||
Советчик Профиль Группа: Модератор Сообщений: 20570 Регистрация: 8.4.2004 Где: Зеленоград Репутация: 3 Всего: 453 |
Ты учитываешь возможность наличия пробела после точки или там двух пробелов после фамилии?
-------------------- О(б)суждение моих действий - в соответствующей теме, пожалуйста. Или в РМ. И высшая инстанция - Администрация форума. |
|||
|
||||
Данкинг |
|
|||
Yersinia pestis Профиль Группа: Завсегдатай Сообщений: 8302 Регистрация: 7.11.2006 Где: მოსკოვი Репутация: 1 Всего: 130 |
А если в БД будет Абдулхаков Зиннур Фаррух Рашид-Оглы ?
Это сообщение отредактировал(а) Данкинг - 20.3.2013, 18:27 -------------------- There's nothing left but silent epitaphs. |
|||
|
||||
password |
|
|||
Шустрый Профиль Группа: Участник Сообщений: 76 Регистрация: 23.9.2008 Где: Украина, Сумы Репутация: нет Всего: 8 |
xackera, программа уже была практически написана, переписывать не хотелось. А на завершающем этапе нужно было сравнивать с другой БД, где ФИО представлено как три поля.
Akina, хорошее замечание. Нужно будет добавить еще один репласе (2 пробела на один), что то типа этого: replace(replace(replace(fio,',',' '),'.',' '), ' ',' ') Данкинг, Всех вариантов тоже не предусмотреть, я согласен и не на 100% совпадений, тем более человеческий фактор работает, и фамилии они не правильно пишут, не делать же еще выбор Фамилий, Имен и Отчеств из справочников... Остальные же просто выпадают в отдельный список на ручной разбор полетов ))) Всем спасибо за качественные замечания, тему отмечаю как решенную ) |
|||
|
||||
Radekk |
|
|||
Новичок Профиль Группа: Участник Сообщений: 42 Регистрация: 11.4.2013 Репутация: нет Всего: нет |
Близко очень к моему вопросу, поэтому задам здесь
Firebird 1.5 в поле таблицы базы данных содержатся строки, например: дракон огнедышаший дырокол дьякон вечно молящийся просто текст дермантин китайский дихлорэтан пакистан дагестан димон шмель Чарльз Дарвин дарданеллы Дейнерис Таргариен и т.д. в строках не содержатся дефисы и прочие знаки препинания, строки начинаются и заканчиваются пробелами, а все буквы upper case. не могу никак составить sql запрос, через "like" чтобы выбрать все строки в которых содержатся слова начинающиеся на "д" и заканчивающиеся на "н" при запросе типа like "% Д[^ ]%Н %" вообще ничего не отображается, уже с ума схожу, хотел регулярками но сервер не поддерживает. может подскажете что??? |
|||
|
||||
Данкинг |
|
|||
Yersinia pestis Профиль Группа: Завсегдатай Сообщений: 8302 Регистрация: 7.11.2006 Где: მოსკოვი Репутация: 1 Всего: 130 |
Я бы не сказал, что близко, но пусть будет близко.
-------------------- There's nothing left but silent epitaphs. |
|||
|
||||
Radekk |
|
||||
Новичок Профиль Группа: Участник Сообщений: 42 Регистрация: 11.4.2013 Репутация: нет Всего: нет |
Спасибо огромное. К сожалению в 1.5 не работает Left().... Similar to так же не работает, поэтому мучения адские.... Пока решил добавлением запроса который вытягивает как можно больше записей и сижу уже в коде фильтрую регулярками пока что..... Но это не айс решение, а костыли... Это сообщение отредактировал(а) Radekk - 28.5.2013, 14:25 |
||||
|
|||||
Данкинг |
|
|||
Yersinia pestis Профиль Группа: Завсегдатай Сообщений: 8302 Регистрация: 7.11.2006 Где: მოსკოვი Репутация: 1 Всего: 130 |
А substring работает? Тогда можно и его заюзать. Какой similar? -------------------- There's nothing left but silent epitaphs. |
|||
|
||||
Radekk |
|
|||
Новичок Профиль Группа: Участник Сообщений: 42 Регистрация: 11.4.2013 Репутация: нет Всего: нет |
substring работает, но опять же Invalid token. Dynamic SQL Error. SQL error code = -104. Token unknown - line 3, column 70. char_length. может есть что то кроме char_length чтоб можно было работать? длинну слов в строке я не знаю, поэтому даже ума не приложу как ее можно разбить на подстроки, может какую процедуру написать чтоб она выборку проверяла? не подскажете? хочется нормальную выборку делать сразу в бд, чтобы потом не писать лишний код с никому не нужными перепроверками. Similar to |
|||
|
||||
Akella |
|
|||
Творец Профиль Группа: Модератор Сообщений: 18485 Регистрация: 14.5.2003 Где: Корусант Репутация: 20 Всего: 329 |
||||
|
||||
Radekk |
|
|||
Новичок Профиль Группа: Участник Сообщений: 42 Регистрация: 11.4.2013 Репутация: нет Всего: нет |
так он мне вытягивает все строки начинающиеся на "Д" и заканчивающиеся на "Н" вместо: Чарльз Дарвин он вытягивает: Дейнерис Таргариен я посмотрел в базу импортированы UDF - rFunc UDF Library там есть функция наподобие "char_length" однако она не возвращает никаких данных и пользоваться ей толком не получается... буду пытаться упросить начальство обновить базу данных до 2.5, но боюсь шансов у меня маловато. |
|||
|
||||
Akella |
|
|||
Творец Профиль Группа: Модератор Сообщений: 18485 Регистрация: 14.5.2003 Где: Корусант Репутация: 20 Всего: 329 |
||||
|
||||
Radekk |
|
|||
Новичок Профиль Группа: Участник Сообщений: 42 Регистрация: 11.4.2013 Репутация: нет Всего: нет |
выдает в результате строки: PERFORMANCE BUILDINGS PATOS PACIOTTI 4US А не PATOS NEW-YORK PARIS ST.LOUIS |
|||
|
||||
Akella |
|
||||
Творец Профиль Группа: Модератор Сообщений: 18485 Регистрация: 14.5.2003 Где: Корусант Репутация: 20 Всего: 329 |
мне кажется, скобки неправильно расставлены, я бы так поставил:
А в твоём случае скобки вообще не нужны, можно было и так записать:
|
||||
|
|||||
Правила форума "Interbase" | |
|
Обязательно указание: 1. Версию InterBase (Firebird, Yaffil) 2. Способа доступа (ADO, BDE, IBX и т.д.)
Если Вам понравилась атмосфера форума, заходите к нам чаще! С Уважением, Akella. |
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей) | |
0 Пользователей: | |
« Предыдущая тема | Firebird, Interbase | Следующая тема » |
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |