Sql 将十进制数修剪为2位

Sql 将十进制数修剪为2位,sql,sql-server,Sql,Sql Server,我有这个疑问 SELECT CONVERT(VARCHAR(20),(((currentytd - PreviousYTD) / PreviousYTD) * 100)) + '%' as ytdGrowth from ytd 它正在返回: 11.224300% 我想返回: 11.22% 我是一个非常新的SQL,所以我试图找到正确的方法来实现这一点 SELECT CONVERT(VARCHAR(20),round((((currentytd - PreviousYTD) / Previ

我有这个疑问

SELECT CONVERT(VARCHAR(20),(((currentytd - PreviousYTD) / PreviousYTD) * 100)) + '%' as ytdGrowth from ytd 
它正在返回: 11.224300%

我想返回: 11.22%

我是一个非常新的SQL,所以我试图找到正确的方法来实现这一点

   SELECT CONVERT(VARCHAR(20),round((((currentytd - PreviousYTD) / PreviousYTD) * 100),2)) + '%' as ytdGrowth from ytd 
只需将
轮(X,2)
添加到查询中

您可能会发现
str()
很有用:

SELECT str( ((currentytd - PreviousYTD) / PreviousYTD) * 100.0, 5, 2) + '%' as ytdGrowth
from ytd 

首先以
2
精度(18,2)转换为
decimal
,然后再转换为
nvarchar

SELECT CONVERT(VARCHAR(20),CONVERT(decimal(18,2),(((currentytd - PreviousYTD) / PreviousYTD) * 100))    ) + '%' AS ytdGrowth 
from ytd 

我个人喜欢使用小数时使用
CAST

CAST (value as DECIMAL (9,2))

9表示字符总数,2表示小数点后的字符数….对于舍入,请使用
舍入
。如果您关心值如何打印出来,那实际上是表示层的工作,而不是DB查询。@Luaan确实正确,这应该发生在表示层上,就像在SQL端这样做一样,您是1。做可能不需要的工作(取决于它的显示方式,它可能仍然有尾随的零)2、使SQL查询变得更难阅读。我个人认为这样做的唯一方法是,如果没有表示层,而你只是运行查询来复制/粘贴到文本文档或某些东西。应该在CurrdMSGG 8114、16级、状态5、1行错误转换数据类型VARCHAR到FLASH之前应用“循环”。@杰夫reyLazo Yup,看看ericZ的评论在你看来,
CAST
CONVERT
在这种情况下有什么区别?当你添加
+'%'
时,你会得到一个错误,就像OP一样。哈,在你指出它之前没有注意到这个符号@gordonlinoff不需要生气,伙计。澄清一下这是一个好消息只是您个人的偏好,如果您有原因,请指定。例如,我更喜欢
CAST()
,因为它是ANSI complient。我更喜欢
CONVERT()
,因为大多数时候我还必须提供style属性,即
CAST()
不支持。奇怪的是,这将被否决而不加评论。这不会始终返回2decimals@Lamak…这确实假设百分比值小于100%(),我承认这在问题中没有指定,但似乎是合理的。但您也给了它一个长度
5
,因此,例如,
SELECT STR(999.4455454,5,2)
返回
999.4