我有以下几行代码
Select 0 as Stipend
为了给津贴增加价值,我这样做
COALESCE(SUM(sdhi.stipend), 0, CONVERT(decimal(16, 4), 0)) Stipend
但是对于列,它返回0而不是十进制,如何将其转换为十进制?
8dtrkrch1#
sql服务器 COALESCE() 函数返回列表中的第一个非空值:你的专栏 sdhi.stipend 数据是 NULL 那么你的第二个论点是 0 结果是第二个参数。if列 sdhi.stipend 数据类型为decimal或money您需要:
COALESCE()
sdhi.stipend
NULL
0
Select COALESCE(SUM(sdhi.stipend), CONVERT(decimal(16,4), 0 )) as Stipend
w80xi6nr2#
0.000与0相同。decimal数据类型不定义值的格式,只定义它的存储方式。这意味着,所述值的表示取决于客户端软件,如ssms或web应用程序。格式化值应该由客户端软件完成(ssms使用当前的默认设置为您完成,其他人可能不会)该行过于复杂:
此外,文本值0的数据类型是 decimal(1,0) 因此,结果将是 decimal(1,0) 什么时候 SUM(sdhi.stipend) 为null(只有在求和的组中只有null值或表为空时才会发生这种情况)。如果你想强迫的话,这就足够了 DECIMAL(16,4) 作为数据类型。
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中十进制算法的知识。https://docs.microsoft.com/en-us/sql/t-sql/data-types/precision-scale-and-length-transact-sql?view=sql-server-ver15
decimal(16, 4)
2条答案
按热度按时间8dtrkrch1#
sql服务器
COALESCE()
函数返回列表中的第一个非空值:你的专栏
sdhi.stipend
数据是NULL
那么你的第二个论点是0
结果是第二个参数。if列
sdhi.stipend
数据类型为decimal或money您需要:w80xi6nr2#
0.000与0相同。decimal数据类型不定义值的格式,只定义它的存储方式。这意味着,所述值的表示取决于客户端软件,如ssms或web应用程序。
格式化值应该由客户端软件完成(ssms使用当前的默认设置为您完成,其他人可能不会)
该行过于复杂:
此外,文本值0的数据类型是
decimal(1,0)
因此,结果将是decimal(1,0)
什么时候SUM(sdhi.stipend)
为null(只有在求和的组中只有null值或表为空时才会发生这种情况)。如果你想强迫的话,这就足够了
DECIMAL(16,4)
作为数据类型。请注意,sum(sdhi.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