查找下一个更大的数字,该数字在SQL编号中为零

时间:2019-05-28 07:01:38

标签: sql sql-server

我正在寻找一种方法来查找下一个更大的数字(在Microsoft SQL中,该数字从1开始,然后是零)。数字可能会有所不同。即:

查询:9856,过程后的结果:10000 查询:98999,操作后结果:100000

谢谢。

编辑:不可能有负数。这是电度表的计算。例如,数字最多可以达到99999或999999或9999999。当能量超过该数字时,它将再次从0开始。因此,我无法读取该时间段内使用的能量。要知道这一点,我需要按要求计算数字,然后执行一些基本数学运算。

由于操作的性质,不需要知道10、100等上发生了什么。仅在发生上述情况时使用。

4 个答案:

答案 0 :(得分:2)

我不知道您为什么要求,或者数学上可以实现任何其他公式。但从技术上讲,可以通过以下方式实现

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 :(得分:2)

这适用于正数(大于零的数字):

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

如果该数字已经是十的幂(1、10、100,...),则会返回数字本身。

答案 2 :(得分:2)

您可以通过算术运算来做到这一点:

select power(10, floor(log(v.n - 0.1, 10)) + 1)
from (values (1), (10), (8), (9982), (124)) v(n)

答案 3 :(得分:1)

这是一种相当粗糙的方法,但是确实有效。该查询基本上会查看您的数字所拥有的位数,并假设您要使用的下一个整数以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;