我需要将数字长度最小化为小数点1的固定值3
例: 经过@ a = 45689.45的计算值。
现在我需要获得@a = 45.6的值 如果该值小于100,即如果它是89.63,则我不需要更改它。
@a的最后一个值应为(3,1)
的十进制数答案 0 :(得分:1)
怎么样:
case when @a >= 100 then
round(@a / power(10, floor(log10(@a)) - 1), 1, 1)
else @a
end
答案 1 :(得分:0)
试试这个
DECLARE @a DECIMAL(7, 2)=45689.45
SELECT CASE
WHEN len(CONVERT(INT, @a)) > 3 THEN LEFT(@a / CONVERT(INT, '1' + replicate(0, len(CONVERT(INT, @a))-2)), 4)
ELSE @a
END
答案 2 :(得分:0)
我还没有对此进行过测试,但没有使用字符串操作,这可能会起到作用;
declare @i decimal(18, 6); set @i = 2000
select cast(round(@i / case when @i >= 100 then (power(10, floor(log10(@i)) - 1)) else 1.0 end, 1) as decimal(3,1)
手指交叉:)
里斯