На SQL Server 2017 У меня есть базовое число 10 типа DECIMAL(38,0)
, которое мне нужно преобразовать в его базовое представление 2.
Это отлично работает для меньших чисел, но не с целевым порядком величины:
DECLARE @var1 DECIMAL(38, 0) = 2679226456636072036565806253187530752;
WITH A
AS (SELECT @var1 AS NUMBER,
CAST('' AS VARCHAR(125)) AS BITS
UNION ALL
SELECT CAST(ROUND(NUMBER / 2, 0, 1) AS DECIMAL(38, 0)),
CAST(BITS + CAST(NUMBER % 2 AS VARCHAR(125)) AS VARCHAR(125))
FROM A
WHERE NUMBER > 0)
SELECT NUMBER,
RIGHT(REPLICATE('0', 125) + CASE
WHEN BITS = ''
THEN '0'
ELSE REVERSE(BITS)
END, 125) AS BIN_VALUE
FROM A
WHERE NUMBER = 0;
Сообщение об ошибке гласит: Msg 8115, Level 16, State 2, Line 2 Arithmetic overflow error converting expression to data type numeric.
Я также пробовал другие подходы, но каждый не удался из-за величины исходного значения. Любая помощь с выполнением этого преобразования очень ценится.