powered by simpleCommunicator - 2.0.53     © 2025 Programmizd 02
Форумы / Firebird, InterBase [игнор отключен] [закрыт для гостей] / Генератор буквенных кодов
6 сообщений из 6, страница 1 из 1
Генератор буквенных кодов
    #39051347
Alexey Kuznetsov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Надо генерить последовательные символьные коды вида: AAAA, AAAB, ...., ZZZZ.
Символы только [A-Z].

Кто-то уже такое делал подобное в виде хранимой процедуры?

Или подкиньте идею как генерировать очередной код.

Я пока думаю сделать так: завести генератор обычный и его итерировать средствами FB.
И написать перекодировку int -> символьное представление, т.е. 0 -> AAAA, 1->AAAB и т.д.

Что думаете?
...
Рейтинг: 0 / 0
Генератор буквенных кодов
    #39051348
ZeroMQ
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Alexey Kuznetsov...

Я пока думаю сделать так: завести генератор обычный и его итерировать средствами FB.
И написать перекодировку int -> символьное представление, т.е. 0 -> AAAA, 1->AAAB и т.д.

Что думаете?

А еще лучше - конвертер (Int64 -> строка) разместить на клиенте. Нафига это счастье на сервере?
...
Рейтинг: 0 / 0
Генератор буквенных кодов
    #39051350
Alexey Kuznetsov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ZeroMQА еще лучше - конвертер (Int64 -> строка) разместить на клиенте. Нафига это счастье на сервере?

Мне удобнее на сервере, так как у меня вся логика построена на хранимках, но в целом, я думаю можно и на клиенте конвертилку разместить: дернуть генератор с клиента, преобразовать в строку и затем сделать insert в БД.

Подумаю в этом направлении тоже.
...
Рейтинг: 0 / 0
Генератор буквенных кодов
    #39051359
ZeroMQ
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Alexey Kuznetsov,

ну, если ты в FB 3.0 проектируешь - можно и функцию объявить.
Простое отображение числа в системе счисления с основанием 26 и ведущими нулями.
Последовательно делишь число на 26 4 (=456976 10 ), остаток - на 26 3 (=17576 10 ), потом - на 26 2 (=676 10 ), на 26 1 (=25 10 ), плюс остаток.
К результату добавляешь "вес" кода символа "А", получаешь очередной символ.

Типа такой:

Код: sql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
create function F_XYZ(src bigint default 0)
returns varchar(5)
as
declare variable result varchar(5);
begin

  result = ascii_char(ascii_val('A') + src / 456976);
  src = mod(src, 456976);

  result = result || ascii_char(ascii_val('A') + src / 17576);
  src = mod(src, 17576);

  result = result || ascii_char(ascii_val('A') + src / 676);
  src = mod(src, 676);

  result = result || ascii_char(ascii_val('A') + src / 26);
  src = mod(src, 26);

  result = result || ascii_char(ascii_val('A') + src);

  return result;

end



Не проверял (пока не используюFB 3/0, но, думаю, мысль понятна.
Ну или UDF.
...
Рейтинг: 0 / 0
Генератор буквенных кодов
    #39052193
somesomeone
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
with recursive t(val, chr) as
(select 65 val, 'A' chr from rdb$database union all
select val+1, ascii_char(val+1) from t where t.val<90)
select t1.chr||t2.chr||t3.chr||t4.chr from t t1,t t2,t t3,t t4
...
Рейтинг: 0 / 0
Генератор буквенных кодов
    #39052197
ZeroMQ
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
somesomeonewith recursive t(val, chr) as
(select 65 val, 'A' chr from rdb$database union all
select val+1, ascii_char(val+1) from t where t.val<90)
select t1.chr||t2.chr||t3.chr||t4.chr from t t1,t t2,t t3,t t4

Ухты.
...
Рейтинг: 0 / 0
6 сообщений из 6, страница 1 из 1
Форумы / Firebird, InterBase [игнор отключен] [закрыт для гостей] / Генератор буквенных кодов
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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