powered by simpleCommunicator - 2.0.52     © 2025 Programmizd 02
Форумы / FoxPro, Visual FoxPro [игнор отключен] [закрыт для гостей] / Сравнение разных полей
20 сообщений из 20, страница 1 из 1
Сравнение разных полей
    #38355592
кот_2013
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
всем привет. Подскажите пожалуйста как сделать такое сравнение
Есть таблица foms.dbf с полями spolis,npolis,w. И есть таблица pac.dbf с полями spolis,npolis,pol.
spolis - серия
npolis - номер полиса
w и pol - пол

в таблице foms иногда поле spolis может быть пустое, если полис единого образца серия не указывается, а в поле pac.dbf если полис единого образца в поле pac.spolis пишется ЕНП.

как сделать сравнение полей spolis и npolis в обеих таблицах и вывести в результирующий курсор поле pol? Ну т.е. учитывать если серия пустая то подставлять в запросе вместо spolis ЕНП и сравнивать.

допустим таблица foms такая
spolis npolis w
123456789012345 Ж
123456765012345 М

А таблица pac такая
spolis npolis pol
ЕНП 123456765012345 Ж
ЕНП 123456765012345 М


как сравнить эти таблицы и вывести в курсор поле pol?
...
Рейтинг: 0 / 0
Сравнение разных полей
    #38355628
кот_2013
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
ни у кого нет предложений?
...
Рейтинг: 0 / 0
Сравнение разных полей
    #38355668
кот_2013
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
так можно писать?

авторselect foms.alltrim(IIF(foms.spolis=Null,"ЕНП",foms.spolis)),foms.npolis,foms.w,pac.pol where foms.spolis=pac.spolis and foms.npolis=pac.npolis into cursor cr1
...
Рейтинг: 0 / 0
Сравнение разных полей
    #38355812
Dima T
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
кот_2013ни у кого нет предложений?
Тут не круглосуточная справочная, постоянных дежурных нет.

Как-то так
Код: sql
1.
... strtran(foms.spolis, 'ЕНП ', '') = pac.spolis ...



кот_2013так можно писать?

авторselect foms.alltrim(IIF(foms.spolis=Null,"ЕНП",foms.spolis)),foms.npolis,foms.w,pac.pol where foms.spolis=pac.spolis and foms.npolis=pac.npolis into cursor cr1
Писать можно как-угодно. Будет ли работать? Запусти и проверь
...
Рейтинг: 0 / 0
Сравнение разных полей
    #38355816
кот_2013
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Dima T, не могли бы вы пояснить ваш код? функция strtran заменяет выражение в строке на другое же.. вот как поменять если в поле spolis ничего нету на ЕНП ?
...
Рейтинг: 0 / 0
Сравнение разных полей
    #38355818
Dima T
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
кот_2013Dima T, не могли бы вы пояснить ваш код? функция strtran заменяет выражение в строке на другое же.. вот как поменять если в поле spolis ничего нету на ЕНП ?
надо менять "ЕНП " на ничего, т.е. "". В результате значения из обох таблиц должны быть без "ЕНП ", только после этого сравнивать.
strtran надо примерять к таблице где встречается "ЕНП ", если я таблицы перепутал, то смени наоборот. Или так (чтоб наверняка):
Код: sql
1.
... alltrim(strtran(foms.spolis, 'ЕНП ', '')) == alltrim(strtran(pac.spolis, 'ЕНП ', '')) ...
...
Рейтинг: 0 / 0
Сравнение разных полей
    #38356149
_VladimirM_
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Есть такая функция EVL().

Код: sql
1.
2.
3.
select pac.* ;
from forms ;
inner join pac on EVL(forms.spolis,'ЕНП') = pac.spolis and forms.npolis = pac.npolis
...
Рейтинг: 0 / 0
Сравнение разных полей
    #38356946
кот_2013
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
_VladimirM_, Спасибо, вроде разобрался с этим. А если допустим длина символьного поля = 7, то как можно в начало добавить 00?

авторSelect ....,iif(LEN(ALLTRIM(pole))<=7,"00"+pole,pole) as pole

ТАК ВЕРНО или нет?
...
Рейтинг: 0 / 0
Сравнение разных полей
    #38356951
кот_2013
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
ТАК верное? случайно цитату сделал вместо кода

Код: sql
1.
Select ....,iif(LEN(ALLTRIM(pole))<=7,"00"+pole,pole) as pole
...
Рейтинг: 0 / 0
Сравнение разных полей
    #38357220
Людмila
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Я извиняюсь, у Вас полиса единого образца 15-ти символьные?
Как бы то ни было, по моему лучше идентифицировать полиса по утвержденному формату полиса ЕОбразца
Затем идут временные - их формат тоже определён конкретно
ну и все отальные
...
Рейтинг: 0 / 0
Сравнение разных полей
    #38357413
кот_2013
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Людмila, Нет, у единых полисов 16 цифр бывает. У нас в базе старого образца полисы как бы урезаются и пишут 7 цифр, хотя должно быть 9, поэтому мне нужно в начало добавлять 00 чтобы для сравнения в дальнейшем использовать общий стандарт. Так же и с новыми у новых нету серии, а у нас не знаю почему сделали серию ЕНП, поэтому также надо вместо ЕНП писать "ничего".
...
Рейтинг: 0 / 0
Сравнение разных полей
    #38357442
Dima T
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
кот_2013ТАК верное? случайно цитату сделал вместо кода

Код: sql
1.
Select ....,iif(LEN(ALLTRIM(pole))<=7,"00"+pole,pole) as pole


Код: sql
1.
"00123" = "000000123"


Так верно?


Если тебе надо 9 символов и недостающие заполнить ведущими нулями, то так:
Код: sql
1.
Select ....,padl(ALLTRIM(pole), 9, '0') as pole ...
...
Рейтинг: 0 / 0
Сравнение разных полей
    #38357477
кот_2013
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Dima T, так он для всех заполнит получается же. А там могут быть записи для которых и не нужно добавлять. Только для тех, где символов <=7 нужно. :) моя проверка всегда верная будет или нет хотел бы узнать? Так то я сделал как указал через IIF подставляется вроде б
...
Рейтинг: 0 / 0
Сравнение разных полей
    #38357685
Dima T
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Ты бы сначала четко сформулировал что тебе надо. А потом спрашивал верно решение или нет. Тут никто не в курсе чего там у тебя происходит.

Лично я не могу придумать нормального объяснения дописыванию двух нулей если в строке не более 7 символов.
Какой смысл превращать 6 символов в 8 ?
...
Рейтинг: 0 / 0
Сравнение разных полей
    #38357876
кот_2013
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
согласен, может быть нечетко сформулировал. У нас в базе полис всегда имеет 7 цифр, хотя по стандарту должно быть 9. первые два нуля просто не указываются в базе. Мне нужно в запросе добавлять 00 в начало полиса.

В поле polis может быть полис либо состоящий из 7 цифр, либо из 16 (новый образец). Теперь в этом запросе мне нужно для полисов, где длина равна 7 добавить в начало 00, чтобы получить 9-ти значный полис, для сравнения.
Код: sql
1.
select seriya,polis,fio from pac where pac.seriya=foms.seriya and pac.polis=foms.polis
...
Рейтинг: 0 / 0
Сравнение разных полей
    #38357947
sg12
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
кот_2013

Вы бы сначала определились с форматами данных, как было вам замечено.
Иначе вам все функции для работы со строками переберут.
...
Рейтинг: 0 / 0
Сравнение разных полей
    #38358495
Людмila
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Может для начала или уже потом пробежаться
REPL npolis WITH PADL(alltrim(npolis),9,'0') FOR LEN(alltrim(npolis))<9
...
Рейтинг: 0 / 0
Сравнение разных полей
    #38358892
Фотография ВладимирМ
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
кот_2013согласен, может быть нечетко сформулировал. У нас в базе полис всегда имеет 7 цифр, хотя по стандарту должно быть 9. первые два нуля просто не указываются в базе. Мне нужно в запросе добавлять 00 в начало полиса.

В поле polis может быть полис либо состоящий из 7 цифр, либо из 16 (новый образец). Теперь в этом запросе мне нужно для полисов, где длина равна 7 добавить в начало 00, чтобы получить 9-ти значный полис, для сравнения.
Код: sql
1.
select seriya,polis,fio from pac where pac.seriya=foms.seriya and pac.polis=foms.polis


Вы неоправданно считаете, что "меньше или равно" - это то же самое, что и "равно". Ведь на практике, у Вас может быть и 6 символов и ни одного символа. К таким значениям тоже будете нули добавлять?

Если есть техническая возможность, то я бы добавил в Ваши таблицы по дополнительному полю, где будет хранится номер полиса приведенный к единому стандарту. И именно это поле и использовать для сравнения и поиска. Ну, например, назовите это поле "cpolis", тогда в таблице будут такие значения

npolis cpolis1234567 001234567123456789 1234567891234567890123456 12345678901234561212<пусто><пусто>7654321 007654321

А поле npolis останется для показа пользователю и для отчетов. В худшем случае, можно сделать отдельную таблицу с парой полей. npolis - ключ поиска и cpolis - значение в нужном формате. При выполнении SQL-запросов добавлять эту таблицу как справочник.

Если же Вы все-таки хотите конструировать выражение для сравнения "на лету", то анализируйте длину ровно на 7 символов, а никак не меньше или равно

И еще один важный момент. Если у Вас поля имеют тип Character, то они имеют еще и концевые пробелы (надеюсь, ведущие пробелы Вы отбрасываете еще на этапе ввода и в таблице их нет). Это значит, что если само поле имеет размерность, например, 20 символов, то добавив к нему 2 ведущих нуля Вы получите символьную строку длиной 22 символа. Как следствие, после добавления двух символов в начале необходимо отбросить два концевых пробела. Это можно сделать при помощи функции left(). В результате, получится нечто вроде такого

Код: sql
1.
2.
3.
4.
select pac.* ;
from forms ;
inner join pac on EVL(forms.spolis,'ЕНП') = pac.spolis ;
        and iif(len(rtrim(forms.npolis)) = 7, '00' + left(forms.npolis,18), forms.npolis) = pac.npolis
...
Рейтинг: 0 / 0
Сравнение разных полей
    #38362658
кот_2013
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
ВладимирМ, меньше 7-ми полей не может быть. т.к. программа не позволяет регистрировать пациентов, если был введен полис меньше 7-ми. я же говорю могут быть либо 7 либо 16 цифр. для тех где 7 цифр в начало 00 добавить нужно
...
Рейтинг: 0 / 0
Сравнение разных полей
    #38362659
кот_2013
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
спасибо за ответы.
...
Рейтинг: 0 / 0
20 сообщений из 20, страница 1 из 1
Форумы / FoxPro, Visual FoxPro [игнор отключен] [закрыт для гостей] / Сравнение разных полей
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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