我正在寻找一种方法来查找下一个更大的数字(在Microsoft SQL中,该数字从1开始,然后是零)。数字可能会有所不同。即:
查询:9856,过程后的结果:10000 查询:98999,操作后结果:100000
谢谢。
编辑:不可能有负数。这是电度表的计算。例如,数字最多可以达到99999或999999或9999999。当能量超过该数字时,它将再次从0开始。因此,我无法读取该时间段内使用的能量。要知道这一点,我需要按要求计算数字,然后执行一些基本数学运算。
由于操作的性质,不需要知道10、100等上发生了什么。仅在发生上述情况时使用。
答案 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;