2017-06-20 40 views
-2

我需要的结果像数字'500.000100'结果应该是'500.0001'。将零截断为最后可用的数字。取整数字

如果没有可用的值十进制值,然后到两位小数后e.g返回500.000000 500.00

+0

请分享对这个问题由于SQL查询 –

+0

您不能混用数据类型,你要么有小数点后2位或4位,你不能兼得。什么是原始数据类型? – HoneyBadger

+0

尝试:'select cast(cast(500.000100 as DECIMAL(9,6))as float)' –

回答

0

播放与format功能。像这样...

declare @d as decimal(19, 6) 

set @d = 50000.123456 

select 
    (case 
     when @d/convert(int, @d) = 1. then format(@d, '#.00') 
     else format(@d, '#.####') 
    end) as FormatD 

set @d = 500.000000 

select 
    (case 
     when @d/convert(int, @d) = 1. then format(@d, '#.00') 
     else format(@d, '#.####') 
    end) as FormatD 
+0

你可以优化这个查询,因为它给出280.00000000000001 DECLARE @num decimal(28,16)= 280.000000000000010000 SELECT PARSENAME(@ num,2)+ REPLACE(RTRIM(LTRIM(REPLACE(@ num-PARSENAME(@num, 2),'0',''))),'','0') –

+0

谢谢DeanSavović为您的支持做出了很大的贡献 –

0

使用格式化功能。

DECLARE @test TABLE 
(
    val DECIMAL(18,9) 
); 

INSERT INTO @test (val) VALUES (0); 
INSERT INTO @test (val) VALUES (1.1); 
INSERT INTO @test (val) VALUES (2.32); 
INSERT INTO @test (val) VALUES (33.501); 
INSERT INTO @test (val) VALUES (444.0060100); 
INSERT INTO @test (val) VALUES (5555.00600000100); 

SELECT val, format(val, '0.00################') formatted 
FROM @test; 
+0

感谢Ryszard Kozlowski,但我需要一个脚本,可以为列中的大量值。 –

+0

我不确定我是否理解您要查找的内容,但是如果您需要支持小数点后的最大位数,则只需在格式化字符串中添加更多'#'字符,例如: 'SELECT val ,格式(val, '0.00 ####################################')格式化为 FROM @测试;' –