存储过程中的列到十进制的转换

osh3o9ms  于 2021-08-01  发布在  Java
关注(0)|答案(2)|浏览(267)

我有以下几行代码

Select 0 as Stipend

为了给津贴增加价值,我这样做

COALESCE(SUM(sdhi.stipend), 0, CONVERT(decimal(16, 4), 0)) Stipend

但是对于列,它返回0而不是十进制,如何将其转换为十进制?

8dtrkrch

8dtrkrch1#

sql服务器 COALESCE() 函数返回列表中的第一个非空值:
你的专栏 sdhi.stipend 数据是 NULL 那么你的第二个论点是 0 结果是第二个参数。
if列 sdhi.stipend 数据类型为decimal或money您需要:

Select COALESCE(SUM(sdhi.stipend), CONVERT(decimal(16,4), 0 )) as Stipend
w80xi6nr

w80xi6nr2#

0.000与0相同。decimal数据类型不定义值的格式,只定义它的存储方式。这意味着,所述值的表示取决于客户端软件,如ssms或web应用程序。
格式化值应该由客户端软件完成(ssms使用当前的默认设置为您完成,其他人可能不会)
该行过于复杂:

COALESCE(SUM(sdhi.stipend), 0, CONVERT(decimal(16, 4), 0)) Stipend

此外,文本值0的数据类型是 decimal(1,0) 因此,结果将是 decimal(1,0) 什么时候 SUM(sdhi.stipend) 为null(只有在求和的组中只有null值或表为空时才会发生这种情况)。
如果你想强迫的话,这就足够了 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中十进制算法的知识。
https://docs.microsoft.com/en-us/sql/t-sql/data-types/precision-scale-and-length-transact-sql?view=sql-server-ver15

相关问题