我有以下几行代码
Select 0 as Stipend
然后为了实际增加津贴的值(value),我这样做了
COALESCE(SUM(sdhi.stipend), 0, CONVERT(decimal(16, 4), 0)) Stipend
但它返回为 0,而不是列的小数,我如何将其转换为小数?
最佳答案
0.000 与 0 相同。DECIMAL 数据类型不定义值的格式,仅定义值的存储方式。这意味着,所述值的表示取决于客户端软件,例如 SSMS 或 Web 应用程序。
格式化值应该由客户端软件完成(SSMS 使用当前的默认设置为您完成此操作,其他软件可能不会)
这一行过于复杂:
COALESCE(SUM(sdhi.stipend), 0, CONVERT(decimal(16, 4), 0)) Stipend
此外,文字值 0 的数据类型为 decimal(1,0)
,因此当 时,结果将为
为 NULL(只有在求和的组中只有 NULL 值或表为空时才会发生这种情况)。decimal(1,0)
SUM(sdhi.stipend)
如果您想强制使用 DECIMAL(16,4)
作为数据类型,这就足够了。
COALESCE(SUM(sdhi.stipend), CONVERT(decimal(16, 4), 0)) Stipend
请注意,SUM(sdhi.stipend) 的结果可能具有不同的精度和小数位数(取决于您存储在列中的数据)。因此,您可能需要考虑以下事项:
CONVERT(decimal(16, 4), COALESCE(SUM(sdhi.stipend), 0)) AS Stipend
这样做的问题是,当 SUM(sdhi.stipend)
的结果超过 decimal(16, 4)
的限制时,您将收到溢出错误。
明智地选择并阅读一些有关 SQL Server 中的十进制算术的内容。
关于sql - 在存储过程中将列转换为小数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/62672553/