我想将百分比SQL查询结果转换为百分比。示例我有一个0.295333我希望它是30%,如果我有一个0.090036我希望它是9%。
这是我到目前为止所做的。
@Autowired Jaxb2Marshaller marshaller;
@Bean
public MarshallingMessageConverter marshallingMessageConverter() {
return new MarshallingMessageConverter(marshaller);
}
我也试过这个,但问题是" .00" 的结果,我不知道如何删除小数。
(100 * (sample1/ sample2) ) as 'Percent'
答案 0 :(得分:1)
因为有些评论指出,如果您从小数点开始的一个或两个原始列都是整数,则可能需要注意您的数据类型。
处理这种情况的一种简单方法是这样的:
ColA * ColB * 1.0
这将确保您的整数被视为小数
因此,如果你有SQL Server 2012+,你可以使用格式而不是乱七八糟。就像这个FORMAT(YourDecimal,'#%')
一样简单。
;WITH cteValues AS (
SELECT 0.295333 as OriginalValue
UNION ALL
SELECT 0.090036 as OriginalValue
)
SELECT
OriginalValue
,FORMAT(OriginalValue,'#%') as PercentFormat
FROm
cteValues
如果您是2012年之前并且没有格式,那么简单的方法是将100舍入到100,然后转换为100并转换为int CAST(ROUND(YourDecimal,2) * 100 AS INT)
;WITH cteValues AS (
SELECT 0.295333 as OriginalValue
UNION ALL
SELECT 0.090036 as OriginalValue
)
SELECT
OriginalValue
,CAST(ROUND(OriginalValue,2) * 100 AS INT) as PercentInt
FROm
cteValues
因为INT根据定义不能有小数位,如果您使用与此类似的方法或您尝试过的方法接收.00,我会问以下内容。
答案 1 :(得分:1)
尝试使用以下脚本..
cast (100 * Round((sample1 / sample2),2) As int ) as 'Percent'
答案 2 :(得分:1)
ROUND
如何运作?它是否保证返回值,如果是,如何保证?这两列的优先级是什么? Arithmetic operators
会影响结果吗?
我只知道我不知道的事情,任何疑问都值得调查。
由于ROUND
始终返回更高的优先级,因此这不是问题。事实上,除法运算符(/
)可能会将您的值转换为整数。
如果不确定或无法保证(例如格式不足,请CAST
而不是必需DECIMAL(4,2)
),请始终验证变量是否始终为一种数据类型或DECIMAL(5,3)
。
DECLARE @Sample1 INT
, @Sample2 DECIMAL(4,2);
SET @Sample1 = 50;
SET @Sample2 =83.11;
SELECT ROUND( 100 * @Sample1 / @Sample2 , 0 )
正确退货60。
SELECT ROUND( 100 * @Sample2 / @Sample1 , 0)
在舍入之前错误地将变量转换为整数。
<强>更新强> 这也解释了为什么小数在ROUND之后仍然存在...它具有更高的优先级。您可以添加另一个强制转换,以将非INT数据类型转换为首选格式。
SELECT CAST( ROUND( <expression>, <Length>) AS INT)
请注意,在回答您的问题时,我自己学到了一些东西! :)
希望这有帮助。