powered by simpleCommunicator - 2.0.40     © 2025 Programmizd 02
Форумы / FoxPro, Visual FoxPro [игнор отключен] [закрыт для гостей] / Ваше мнение по коду.
6 сообщений из 6, страница 1 из 1
Ваше мнение по коду.
    #39379956
faustgreen
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Есть 3-а варианта кода:
№1
Код: sql
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
Код: sql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
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
Код: sql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
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



Какой вариант вы выберите ?
...
Рейтинг: 0 / 0
Ваше мнение по коду.
    #39379966
Dima T
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Ты бы лучше написал что этим кодом хочешь получить.

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



Если поле символьное, то
Код: sql
1.
select padl(alltrim(kod), 3, '0') as kod ...
...
Рейтинг: 0 / 0
Ваше мнение по коду.
    #39379969
faustgreen
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Извиняюсь за плохой пример(писал обстракцию). Суть задачи в следующем: есть таблица перекодировки, где одному значению устанавливается в соответствие другое. При этом коды никак логически не связаны. Т.е. Можно считать, что в примере выше пары 01 - 001, 02 - 002 ... это например 01 - 756, 02 - 999, ...
...
Рейтинг: 0 / 0
Ваше мнение по коду.
    #39379970
faustgreen
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Главный вопрос - не как это работает, а какой код можно считать более "правильным". Т.е. за какой код опытные программисты дадут вам по рукам, а за какой похвалят?
...
Рейтинг: 0 / 0
Ваше мнение по коду.
    #39379980
alextashk
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
faustgreen,

Код: c#
1.
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 он побыстрей будет. И универсальней.
...
Рейтинг: 0 / 0
Ваше мнение по коду.
    #39379984
Dima T
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Есть простое правило: не мешать в кучу код и данные. Все три твои варианта его нарушают.

Если есть таблица, то храни как таблицу или напиши код который создаст и наполнит курсор.
Например recode
kodkod_new0100102002
Использовать так
Код: sql
1.
select a.*, recode.kod_new from a left join recode on a.kod = recode.kod ...
...
Рейтинг: 0 / 0
6 сообщений из 6, страница 1 из 1
Форумы / FoxPro, Visual FoxPro [игнор отключен] [закрыт для гостей] / Ваше мнение по коду.
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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