Добро пожаловать в форум, Guest  >>   Войти | Регистрация | Поиск | Правила | В избранное | Подписаться
Все форумы / Microsoft SQL Server Новый топик    Ответить
 Составление запроса для кодирования чисел  [new]
den_alex_94
Member

Откуда:
Сообщений: 30
Буквенный код (БК) формируется по следующему принципу: единица обозначается буквой A. При увеличении числа на 1 крайняя правая буква в коде заменяется на следующую в алфавитном порядке. Если справа стоит буква Z, она заменяется на A; вторая буква справа заменяется стоящей следом за ней в алфавите. Если второй справа также стоит Z, она заменяется на A, а следующей в алфавитном порядке заменяется третья справа буква и т. д. Если последовательность целиком состоит из Z, все они заменяются на A, и еще одна буква A дописывается справа.
Пример отрезка натурального ряда: A, B, ..., Z, AA, AB,..., AZ, BA, BB,...ZZ, AAA, AAB и т. д.
Есть набор положительных чисел типа int, нужно для него вывести буквенные коды. Объясните как реализовать перевод числа в буквенный код
Пробовал так
select q_id,
iif (q_id>475254,char(ascii('A')+q_id/456976-1),'')+
iif (q_id>18278,char(ascii('A')+iif(q_id>475254,q_id%456976,q_id)/17576-1),'')+
iif (q_id>702,char(ascii('A')+iif(q_id>18278,iif(q_id>475254,q_id%456976,q_id)%17576,q_id)/676-1),'')+
iif (q_id>26,char(ascii('A')+iif(q_id>702,iif(q_id>18278,iif(q_id>475254,q_id%456976,q_id)%17576,q_id)%676,q_id)/26-1),'')+
char(ascii('A')+iif(q_id>26,iif(q_id>702,iif(q_id>18278,iif(q_id>475254,q_id%456976,q_id)%17576,q_id)%676,q_id)%26,q_id)-1) bk
From utq

Utq -это таблица , в которой эти числа хранятся, q_id - сами числа
Не для всех возможных чисел выдает верный ответ
18 фев 16, 13:42    [18835033]     Ответить | Цитировать Сообщить модератору
 Re: Составление запроса для кодирования чисел  [new]
Akina
Member

Откуда: Зеленоград, Москва, Россия
Сообщений: 20614
Это называется "перевод из десятичной системы счисления в 26-ричную". Математика, приблизительно 9-10 класс.
18 фев 16, 13:49    [18835109]     Ответить | Цитировать Сообщить модератору
 Re: Составление запроса для кодирования чисел  [new]
den_alex_94
Member

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

Здесь цифры идут от 1 -A до 26-B, а не от 0 до 25, из-за этого все проблемы
18 фев 16, 14:09    [18835310]     Ответить | Цитировать Сообщить модератору
 Re: Составление запроса для кодирования чисел  [new]
Akina
Member

Откуда: Зеленоград, Москва, Россия
Сообщений: 20614
den_alex_94
из-за этого все проблемы

А решение этой "проблемы" так и вовсе арифметика.
Напиши сначала обратное преобразование - и увидишь, как подкорректировать прямое.
18 фев 16, 14:37    [18835542]     Ответить | Цитировать Сообщить модератору
 Re: Составление запроса для кодирования чисел  [new]
den_alex_94
Member

Откуда:
Сообщений: 30
Akina,
Ну вот, например, код zac=26*26^2+1*26^1+3*26^0
И что мне это дает?
18 фев 16, 14:58    [18835750]     Ответить | Цитировать Сообщить модератору
 Re: Составление запроса для кодирования чисел  [new]
Akina
Member

Откуда: Зеленоград, Москва, Россия
Сообщений: 20614
Ну если бы кто не злился, а думал и тщательно делал предложенное и немного больше (скажем, добавил ведущие нули) - то быстро бы увидел, что у него система счисления с изменяющимся основанием. Для последней позиции (цифры) оно 26, для всех остальных 27.
18 фев 16, 15:08    [18835839]     Ответить | Цитировать Сообщить модератору
 Re: Составление запроса для кодирования чисел  [new]
den_alex_94
Member

Откуда:
Сообщений: 30
Akina,
Правильно так, что ли?
zac=26*27^2+1*27^1+3*26^0
18 фев 16, 15:35    [18836116]     Ответить | Цитировать Сообщить модератору
 Re: Составление запроса для кодирования чисел  [new]
aleks2
Guest
den_alex_94
Akina,

Здесь цифры идут от 1 -A до 26-B, а не от 0 до 25, из-за этого все проблемы


Наивняк. Вычти из числа 1 и преобразуй обычным образом к основанию 26.
18 фев 16, 18:56    [18837494]     Ответить | Цитировать Сообщить модератору
Все форумы / Microsoft SQL Server Ответить