В системе я работаю с имеет систему нумерации, где числа 0-999
представлены обычным 0-999
, но 1000
представлена , а затем A01
, A02
, A03
и т.д., 1100
быть B00
и т.д.заказ порядковый номер форматирования
Я не могу придумать способ справиться с этим в T-SQL, не прибегая к проверке отдельных цифр с помощью огромных аргументов case, и должен быть лучший способ. Я думал об использовании шестнадцатеричного кода, но это неправильно.
DECLARE @startint int = 1,
@endint int = 9999;
;WITH numbers(num)
AS
(
SELECT @startint AS num
UNION ALL SELECT num+1 FROM numbers
WHERE num+1 <= @endint
)
SELECT num, convert(varbinary(8), num) FROM [numbers] N
OPTION(MAXRECURSION 0)
С этим 999
теперь 3E7
, где это должно быть просто 999
.
Это в настоящее время производит это:
Number Sequence
0 0x00000000
1 0x00000001
...
10 0x0000000A
...
100 0x00000064
...
999 0x000003E7
1000 0x000003E8
Что я ищу:
Number Sequence
0 000
1 001
...
10 010
11 011
12 012
...
999 999
1000 A00
1001 A01
...
1099 A99
1100 B00
1101 B01
1200 C00
мне это нужно для работы в SQL Server 2008.
Можете ли вы показать ваши ожидаемые выходные и текущие данные – TheGameiswar
SQL Server уже есть [последовательности] (https://msdn.microsoft.com/en-us/library/ff878058.aspx). Эта рекурсивная версия на самом деле является одним из самых медленных способов генерации таблицы чисел, а не способом генерации следующего числа в последовательности. Наконец, ваша проблема заключается не в опрокидывании (вы вообще не перевертываетесь), это вопрос форматирования числа для строки –
@PanagiotisKanavos не беспокоится о том, как быстро или медленно это происходит. Система была написана, когда люди были новыми для кодирования, поэтому на самом деле есть таблица, в которой хранится все это ... * cringe * ... но это означает, что я должен вставить его и больше не беспокоиться об этом. – Logan