这里有两个问题。
首先是四舍五入。这可以通过Round
SQL 中的函数轻松完成:
SELECT Round(8660.125, 2);
-- returns 8660.130
如您所见,第二个是它仍然返回小数点后的 3 位数字。这是由于数据类型。你得到了四舍五入的值,但它仍然显示一个额外的数字。
您可以通过以下方式解决此问题:
SELECT Convert(decimal(16, 2), 8660.125);
--returns 8660.13 by implicitly rounding--you could round first but not needed
但是,上面这两个值在数值上是相同的。在我看来,您根本不应该在 SQL Server 端处理演示文稿。如果您想要两位小数,只需将 SSRS 报告中的单元格格式设置为#.00
. 无论如何,这将确保您获得所需的(四舍五入)小数位数!不需要任何功能。只是一个简单的属性。
日期的原理相同。日期的基础价值只是一个数字。但是有无数种方法可以向用户显示日期——使用长名称或不同的部分顺序或使用不同的分隔符。每次更改日期格式时,您会一直回到 SQL 并更改Convert()
样式吗?
您不希望 SQL Server 确定报表中这些数字的字体、颜色、大小、填充、样式、位置或可见性。这些都必须在设计时手动设置。那么为什么值的显示方式(当值完全相等时)会有所不同?在我看来,将其推送到 SQL 查询中会将关注的区域移到错误的位置。这增加了不需要存在的查询的复杂性(而不是“智能”)!而且我也没有看到将单元格的数字格式设置为“增加智能”。
这是一个演示问题,因此请将其放在解决所有其他演示元素的适当位置——SSRS 报告。
更新
我可以想到一种情况,您希望在查询中执行转换,那时该值将在更多计算中进一步使用,并且有关所述计算的业务规则需要它。例如,如果你在计算银行利息,他们可能有这样的规则:“在第 1 步之后四舍五入到小数点后 4 位,然后在步骤 3 之后最终四舍五入到小数点后 2 位(美元和美分)。” 但那是另一回事:现在价值很重要,而不仅仅是它的展示。