我想问一下是否有人知道查询以十进制的方式删除0值。
例如:字段名称百分比具有这些值
770.00000000000000000000, 340.670000000000000000000, 96.00000000000000000000, 4400.56000000000000000000, 109.89000000000000000000, 109.00000000000000000000, 37.00000000000000000000,
目前我正在使用查询“select cast([Percent] as decimal(9,2))as [Percent] from table”并将导致
770.00, 340.67, 96.00, 4400.56, 109.89, 109.00, 37.00,
我实际上想要结果: - >
770 340.67, 96, 4400.56, 109.89, 109, 37,
答案 0 :(得分:2)
这个相当讨厌的TSQL可能只是做这个工作:
select
case
right(
cast(cast([percent] as decimal(9,2)) as nvarchar(11))
,2)
when '00' then cast(cast([percent] as int) as nvarchar(11)) as [percent]
else cast(cast([percent] as decimal(9,2)) as nvarchar(11)) as [percent]
end
from table
当然它总是返回一个字符串,但这是你的要求所固有的,你正在寻找一个值的表示......
我认为你应该将该表示推迟到更有意义的地方(report,datagrid?),并且你有更多工具(比如string.format kinda tools)来更好地完成工作。
答案 1 :(得分:1)
您可以使用DECIMAL和FLOAT的组合。首先将它向下舍入到2个deciaml位置,然后浮动以删除不需要的0的
e.g。
select cast(cast([Percent] as decimal(9,2)) AS FLOAT) as [Percent]
以340.69999999999999为例,首先将它舍入到340.70,然后它将零点给你340.7。与任何舍入一样,精度将会丢失。
答案 2 :(得分:0)
你可能只是投射到FLOAT。
答案 3 :(得分:0)
您可以使用CONVERT
两次功能,一次通过转换为浮动来放置0
,一次转换为使用样式128
DECLARE @Sample AS TABLE
(
SomeNumber DECIMAL(26, 12)
)
INSERT INTO @Sample
VALUES ( 770.00000000000000000000 )
, ( 340.670000000000000000000 )
, ( 96.00000000000000000000 )
, ( 4400.56000000000000000000 )
, ( 109.89000000000000000000 )
, ( 109.00000000000000000000 )
, ( 37.00000000000000000000 )
SELECT CONVERT(VARCHAR(25), CONVERT(FLOAT, SomeNumber), 128) AS NoZeros
FROM @Sample