|
частичный выбор строковых полей
|
|||
---|---|---|---|
#18+
Помогите, пожалуйста, решить задачу. Есть две таблицы, в одной есть поле FIO, содержащее данные "Иванов Иван Иванович" , "Федоров Ф.О". Вторая таблица имеет три поля First_name(Иванов, федоров), name(Иван, федор), Last_name(Иванович, Олегович). Необходимо выбрать людей с одинаковыми фамилиями в третью таблицу. можно ли это сделать с помощью LIKE и какой должна быть маска ? например select .... from table1, table 2 where table1. first_name like (table2. FIO маска) into dbf table3 ... |
|||
:
Нравится:
Не нравится:
|
|||
26.09.2013, 16:07 |
|
частичный выбор строковых полей
|
|||
---|---|---|---|
#18+
Наоборот надо: "Строка в которой ищем" like "Подстрока которую ищем" Код: sql 1.
только в like проценты добавь как в прошлом топике. ... |
|||
:
Нравится:
Не нравится:
|
|||
26.09.2013, 16:46 |
|
частичный выбор строковых полей
|
|||
---|---|---|---|
#18+
просто проблема в том что вместо Ивана Ивановича или Федора Федоровича в поле FIO могут стоять инициалы... ... |
|||
:
Нравится:
Не нравится:
|
|||
26.09.2013, 17:08 |
|
частичный выбор строковых полей
|
|||
---|---|---|---|
#18+
Anastassie, попробуй, может будет польза от применения функции GetWordNum ()? ... |
|||
:
Нравится:
Не нравится:
|
|||
27.09.2013, 01:07 |
|
частичный выбор строковых полей
|
|||
---|---|---|---|
#18+
Anastassieпросто проблема в том что вместо Ивана Ивановича или Федора Федоровича в поле FIO могут стоять инициалы... Тогда задача не имеет однозначного решения. Например Иванов А.А. может быть Алексеем Андреевичем, Александром Анатольевичем и т.д. Потом может быть два Иванова Алексея Андреевича. Тут надо писать эвристический анализатор: берем одну запись из первой таблицы, разбираем (выделяя фамилию и инициалы или имя отчество), ищем все возможные варианты во второй, если во второй несколько вариантов, то предлагаем пользователю выбрать правильный. Возможно есть еще какие-то уточняющие данные (д.р., ИНН, паспорт и т.п.) ... |
|||
:
Нравится:
Не нравится:
|
|||
27.09.2013, 07:36 |
|
частичный выбор строковых полей
|
|||
---|---|---|---|
#18+
Dima T, не надо усложнять тему ответами на незаданные вопросы. Заданный вопрос касался только фамилий. Так что Ивановы ОДНОЗНАЧНО остаются Ивановыми независимо от их имён и отчеств. А если ты хочешь всё-таки искать по ФИО, то с учётом того, что некоторые имена-отчества представлены в таблицах инициалами, такая задача будет не неоднозначна, а просто НЕРАЗРЕШИМА. ... |
|||
:
Нравится:
Не нравится:
|
|||
27.09.2013, 10:59 |
|
частичный выбор строковых полей
|
|||
---|---|---|---|
#18+
Rostislav D. KudryashovDima T, не надо усложнять тему ответами на незаданные вопросы. Немного телепатических способностей (т.е. внимательно прочитай вот это 14888851 ) и ты поймешь что вопрос изначально был поставлен неточно. Сколько еще недосказано - пусть ТС уточнит. Rostislav D. KudryashovЗаданный вопрос касался только фамилий. Так что Ивановы ОДНОЗНАЧНО остаются Ивановыми независимо от их имён и отчеств. Равность Ивановых можно допустить разве что при написании курсовой. В реальной жизни это недопустимо. Rostislav D. KudryashovА если ты хочешь всё-таки искать по ФИО, то с учётом того, что некоторые имена-отчества представлены в таблицах инициалами, такая задача будет не неоднозначна, а просто НЕРАЗРЕШИМА. Полное условие задачи не озвучено. Простое сведение двух списков фамилий не имеет практического смысла. На практике такое требуется для сведения однотипных справочников двух разных баз, т.е. с обоих сторон есть еще инфа связанная с конкретным ФИО. ... |
|||
:
Нравится:
Не нравится:
|
|||
27.09.2013, 12:45 |
|
частичный выбор строковых полей
|
|||
---|---|---|---|
#18+
AnastassieПомогите, пожалуйста, решить задачу. Есть две таблицы, в одной есть поле FIO, содержащее данные "Иванов Иван Иванович" , "Федоров Ф.О". Вторая таблица имеет три поля First_name(Иванов, федоров), name(Иван, федор), Last_name(Иванович, Олегович). Необходимо выбрать людей с одинаковыми фамилиями в третью таблицу. можно ли это сделать с помощью LIKE и какой должна быть маска ? например select .... from table1, table 2 where table1. first_name like (table2. FIO маска) into dbf table3 Если вам нужны только фамилии, то что мешает вам из таблиц брать только инициалы имени и отчества. Может, вообще для вашей задачи вам достаточно сравнивать только одни фамилии. По крайней мере, не придется вам "пИсать эвристический анализатор". Да и с процентами LIKE - к примеру, Кай Метов и Кайметов - это разные фамилии. ... |
|||
:
Нравится:
Не нравится:
|
|||
27.09.2013, 13:30 |
|
частичный выбор строковых полей
|
|||
---|---|---|---|
#18+
задача и является неоднозначной, к сожалению, никаких дополнительных уникальных данных типа паспортный номер или индификационный код в таблицах нет((( просто я хотела выбрать поле с фамилиями и инициалами, и приципить к итоговой таблице имена и отчества из второй таблицы потом уже глазками сравнить совпадают имена с инициалами или нет. Самое печальное, что это не лабораторная работа , а реальная ситуация на работе. объем таблиц 5 тысяч записей и почти 50, нужно хотя бы к минимуму свести количество записей проверяемых глазами. Требуется выбрать из таблицы в 5 000 записей с полем fio всех, кто есть во второй таблице. Почему-то у меня с маской '%' ничего не выбирается. Не могли бы Вы объяснить, каким образом она отрабатывает. Мне нужно чтобы проверялась идентичность начала одного поля с целым полем во второй таблице. Например, значение в поле FIO 'иванов и.и' или же 'петров петр олегович' со значениями поля во второй таблице fullname 'иванов' и 'петров' (во второй таблице фамилии отдельно от имен и отчеств, то есть в поле fullname отображаются фамилии,name - имена, otch - отчества) ... |
|||
:
Нравится:
Не нравится:
|
|||
30.09.2013, 11:16 |
|
частичный выбор строковых полей
|
|||
---|---|---|---|
#18+
Тут почитай про оператор LIKE. Там подробно с примерами. ... |
|||
:
Нравится:
Не нравится:
|
|||
30.09.2013, 14:07 |
|
частичный выбор строковых полей
|
|||
---|---|---|---|
#18+
AnastassieМне нужно чтобы проверялась идентичность начала одного поля с целым полем во второй таблице. Например, значение в поле FIO 'иванов и.и' или же 'петров петр олегович' со значениями поля во второй таблице fullname 'иванов' и 'петров' (во второй таблице фамилии отдельно от имен и отчеств, то есть в поле fullname отображаются фамилии,name - имена, otch - отчества) Если надо только фамилии сравнить, то LIKE не нужен. Фамилия всегда пишется целиком. Надо только вытащить ее из FIO. Если фамилия всегда первым словом, то так Код: sql 1.
инициалы как-то так можно добавить Код: sql 1.
Но вариант с инициалами может не сработать если между именем и отчеством нет пробела, например Петров В.В. Также будут взяты инициалы от полного имени, хотя точнее сравнить по полному имени. Поэтому лучше написать свою функцию сравнения CompareFIO(), и вызывать ее: Код: sql 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12.
... |
|||
:
Нравится:
Не нравится:
|
|||
30.09.2013, 14:24 |
|
частичный выбор строковых полей
|
|||
---|---|---|---|
#18+
Dima T Для замены в инициалах точки на пробел в Фоксе есть функция CHRTRAN(). Также есть функция для "Compare на ходу" - IIF. Хороший Select вы написали, почти универсальный. ... |
|||
:
Нравится:
Не нравится:
|
|||
30.09.2013, 16:25 |
|
частичный выбор строковых полей
|
|||
---|---|---|---|
#18+
Anastassie, ситуация твоя довольно типична. Задача типа: поди туда, не знаю куда, принеси то, не знаю что. Для того чтоб сравнивать данные из полей FIO с другой таблицей, неплохо разобрать FIO на составляющие. Для этого я тебе и намекал на использование функции GETWORDNUM(). Намёк оказался для тебя слишком тонок. Попробую его утолстить. Код: plaintext 1. 2. 3. 4. 5. 6. 7. 8. 9.
... |
|||
:
Нравится:
Не нравится:
|
|||
30.09.2013, 22:27 |
|
частичный выбор строковых полей
|
|||
---|---|---|---|
#18+
Anastassie Попробуйте такое условие: WHERE ALLTRIM(table1.фио) = ALLTRIM(table2.фамилия) + ' ' + ALLTRIM(table2.имя) + ' ' + ALLTRIM(table2.отчество) ; OR ALLTRIM(table1.фио) = ALLTRIM(table2.фамилия) + ' ' + LEFT(table2.имя,1) + '. ' + LEFT(table2.отчество,1) + '.' При необходимости поля таблиц предварительно обработать - PROPER(),STRTRAN(поле,'.','. '),STRTRAN(поле,' ',' ') ... |
|||
:
Нравится:
Не нравится:
|
|||
01.10.2013, 10:05 |
|
|
start [/forum/topic.php?fid=41&msg=38409203&tid=1582897]: |
0ms |
get settings: |
7ms |
get forum list: |
11ms |
check forum access: |
3ms |
check topic access: |
3ms |
track hit: |
160ms |
get topic data: |
12ms |
get forum data: |
2ms |
get page messages: |
60ms |
get tp. blocked users: |
2ms |
others: | 14ms |
total: | 274ms |
0 / 0 |