Добро пожаловать в форум, Guest  >>   Войти | Регистрация | Поиск | Правила | В избранное | Подписаться
Все форумы / FoxPro, Visual FoxPro Новый топик    Ответить
 Ваше мнение по коду.  [new]
faustgreen
Member

Откуда:
Сообщений: 406
Есть 3-а варианта кода:
№1
select a.*, icase(a.kod = 01, 001, a.kod = 02, 002, a.kod = 03, 003, ..., a.kod = 10, 010, 0) as kod from sometable into table result


№2
select a.*, a.kod from sometable into table result
scan
   do case
        case kod = 01
            kod2 = 001
            ...
        case kod = 10
             kod2 = 010
        otherwise
             kod2 = 0
   endcase

   replace kod with kod2
endscan


№3
procedure convert
lparameters kod
      do case
        case kod = 01
            kod2 = 001
            ...
        case kod = 10
             kod2 = 010
        otherwise
             kod2 = 0
   endcase
return kod2

select a.*, convert(a.kod) as kod from sometable into table


Какой вариант вы выберите ?
6 янв 17, 10:05    [20076910]     Ответить | Цитировать Сообщить модератору
 Re: Ваше мнение по коду.  [new]
Dima T
Member

Откуда:
Сообщений: 15271
Ты бы лучше написал что этим кодом хочешь получить.

Поле kod какого типа? Судя по коду - числовой, если так то 01 = 001 и сохранится как 1. Тут твое дописывание ноликов вообще не нужно.
select a.*, cast(iif(between(a.kod, 1, 10), a.kod, 0)) as int) as kod ...


Если поле символьное, то
select padl(alltrim(kod), 3, '0') as kod ...
6 янв 17, 10:23    [20076931]     Ответить | Цитировать Сообщить модератору
 Re: Ваше мнение по коду.  [new]
faustgreen
Member

Откуда:
Сообщений: 406
Извиняюсь за плохой пример(писал обстракцию). Суть задачи в следующем: есть таблица перекодировки, где одному значению устанавливается в соответствие другое. При этом коды никак логически не связаны. Т.е. Можно считать, что в примере выше пары 01 - 001, 02 - 002 ... это например 01 - 756, 02 - 999, ...
6 янв 17, 10:31    [20076944]     Ответить | Цитировать Сообщить модератору
 Re: Ваше мнение по коду.  [new]
faustgreen
Member

Откуда:
Сообщений: 406
Главный вопрос - не как это работает, а какой код можно считать более "правильным". Т.е. за какой код опытные программисты дадут вам по рукам, а за какой похвалят?
6 янв 17, 10:35    [20076950]     Ответить | Цитировать Сообщить модератору
 Re: Ваше мнение по коду.  [new]
alextashk
Member

Откуда:
Сообщений: 431
faustgreen,

select a.*, icase(a.kod = 1, 1, a.kod = 2, 2, a.kod = 3, 3, ..., a.kod = 10, 10, 0)+000 as kod from sometable into table result


select он побыстрей будет. И универсальней.
6 янв 17, 10:49    [20076975]     Ответить | Цитировать Сообщить модератору
 Re: Ваше мнение по коду.  [new]
Dima T
Member

Откуда:
Сообщений: 15271
Есть простое правило: не мешать в кучу код и данные. Все три твои варианта его нарушают.

Если есть таблица, то храни как таблицу или напиши код который создаст и наполнит курсор.
Например recode
kodkod_new
01001
02002

Использовать так
select a.*, recode.kod_new from a left join recode on a.kod = recode.kod ...
6 янв 17, 10:58    [20076988]     Ответить | Цитировать Сообщить модератору
Все форумы / FoxPro, Visual FoxPro Ответить