Найти следующий больший номер с нулями в sql номер - PullRequest
1 голос
/ 28 мая 2019

Я ищу способ найти следующее большее число, начиная с 1 и заканчивая нулями в Microsoft SQL.Числа могут варьироваться в цифрах.т.е.:

Запрос: 9856, Результат после процедуры: 10000 Запрос: 98999, Результат после процедуры: 100000

Спасибо.

РЕДАКТИРОВАТЬ: нет вероятности наличия отрицательных чисел,Это расчет для счетчика энергии.Например, числа могут доходить до 99999, или 999999, или 9999999. Когда энергия преодолеет это число, оно снова начнется с 0. Поэтому я не могу прочитать, какая энергия использовалась в этот период.Чтобы узнать это, мне нужно вычислить число в соответствии с запросом, а затем выполнить некоторые основные математические операции.

Нет необходимости знать, что происходит в 10, 100 и т. Д., Из-за характера операции.Он будет использоваться только тогда, когда вышеописанный сценарий произойдет.

Ответы [ 4 ]

2 голосов
/ 28 мая 2019

Вы можете сделать это только с помощью арифметических операций:

select power(10, floor(log(v.n - 0.1, 10)) + 1)
from (values (1), (10), (8), (9982), (124)) v(n)
2 голосов
/ 28 мая 2019

Это работает для положительных чисел (чисел больше нуля):

select power(10, ceiling( log10(the_number) )) from mytable;

Если число уже является степенью десяти (1, 10, 100, ...), само число равновернулся.

2 голосов
/ 28 мая 2019

Я не знаю, почему вы требуете или математически любая другая формула может быть реализована. но технически это может быть достигнуто следующим образом

DECLARE @count INT
SET @count = 1000

DECLARE @result INT

SET @result = CASE WHEN @count%10 = 0 THEN @count ELSE CAST('1'+REPLICATE('0',LEN(@count)) AS INT) end

SELECT @result
1 голос
/ 28 мая 2019

Это довольно грубый способ сделать это, однако он работает. Запрос в основном смотрит на количество цифр, которое имеет ваше число, предполагает, что следующее целое число, которое вы хотите, начинается с 1, а затем добавляет к нему соответствующее число 0.

Обратите внимание, что это выглядит только для следующего приращения и не округляется вниз.

Также за 10 вы получите 100, а за 1000 вы получите 10000.

declare @number int = 98999;
declare @len int = len(@number);
declare @stringtoreturn nvarchar(200)='1';

declare @runs int = 1;

while @runs<=@len
    begin
    select @stringtoreturn = @stringtoreturn + '0';
    select @runs=@runs+1;
    end

select @stringtoreturn;
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...