SQL在乘法后丢失小数

SQL在乘法后丢失小数,sql,sql-server,Sql,Sql Server,我有一张桌子,包括: COUNT RISK 35 0.6456000000 11 0.5234000000 4 0.8431000000 我需要一列将这两列相乘。然而,我得到的结果是: TOTAL 35 11 4 计数-整数 风险-VARCHAR SQL显然是将小数四舍五入为1。我试过将其转换为十进制、数字和乘以1.0。我需要保留小数以便实际计算。任何帮助都会很好像这样将结果转换为十进制 SELECT CONVERT(DECIMAL(1

我有一张桌子,包括:

COUNT    RISK
35       0.6456000000
11       0.5234000000
4        0.8431000000
我需要一列将这两列相乘。然而,我得到的结果是:

TOTAL
35
11
4  
计数-整数

风险-VARCHAR


SQL显然是将小数四舍五入为1。我试过将其转换为十进制、数字和乘以1.0。我需要保留小数以便实际计算。任何帮助都会很好

像这样将结果转换为十进制

SELECT 
   CONVERT(DECIMAL(16,10), COUNT * RISK) AS DecimalResult
FROM dbo.whatever;
或将计数转换为十进制

SELECT CAST(COUNT AS DECIMAL(16,10)) * RISK

将结果转换为十进制,如下所示

SELECT 
   CONVERT(DECIMAL(16,10), COUNT * RISK) AS DecimalResult
FROM dbo.whatever;
或将计数转换为十进制

SELECT CAST(COUNT AS DECIMAL(16,10)) * RISK

这个问题真的很可疑。从表面上看,[Count]和[Risk]两列似乎具有不同的数据类型,[Count]为整数,[Risk]为十进制或浮点。 根据BOL,十进制/浮点数据类型具有更高的优先级,我将在这里引用

当运算符组合两个不同数据类型的表达式时,数据类型优先级规则指定优先级较低的数据类型转换为优先级较高的数据类型。如果转换不是受支持的隐式转换,则返回错误。当两个操作数表达式具有相同的数据类型时,运算结果具有该数据类型

所以对我来说,在SQL Server中,当您

Select [Total]=[Count]*[Risk] from [your_table]

您无法获得原始问题中显示的结果。

此问题确实可疑。从表面上看,[Count]和[Risk]两列似乎具有不同的数据类型,[Count]为整数,[Risk]为十进制或浮点。 根据BOL,十进制/浮点数据类型具有更高的优先级,我将在这里引用

当运算符组合两个不同数据类型的表达式时,数据类型优先级规则指定优先级较低的数据类型转换为优先级较高的数据类型。如果转换不是受支持的隐式转换,则返回错误。当两个操作数表达式具有相同的数据类型时,运算结果具有该数据类型

所以对我来说,在SQL Server中,当您

Select [Total]=[Count]*[Risk] from [your_table]

您无法获得原始问题中显示的结果。

首先将计数转换为十进制数…如果您关心小数位数,请使用
十进制(12,10)
。列的数据类型(计数、风险和总数)是什么?您可以共享正在运行的用于乘法的sql命令吗?我回显@RMH的datatype语句。如果计数和风险都以小数开头,则返回一个小数。因为Count看起来是一个int,所以总数将是一个int。我还建议更改Count的列名。这在SQL中有点特殊。我也希望看到更多信息。也许在这一点上不太可能,因为已经有了一个公认的答案,但正如jyao在他的/她的答案中指出的那样,似乎真的不需要显式转换。先将转换计数为十进制…如果您关心小数位数,请使用
decimal(12,10)
。列的数据类型(计数、风险和总数)是什么?您可以共享正在运行的用于乘法的sql命令吗?我回显@RMH的datatype语句。如果计数和风险都以小数开头,则返回一个小数。因为Count看起来是一个int,所以总数将是一个int。我还建议更改Count的列名。这在SQL中有点特殊。我也希望看到更多信息。也许现在不太可能,因为已经有了一个被接受的答案,但正如jyao在他的/她的答案中指出的那样,似乎真的不需要明确的演员阵容。尽管这是一个问题而不是答案,我还是投了赞成票,因为这是一个非常好的问题。我很想知道OP中产生结果的表结构和查询是什么样子的。尽管这更多的是一个问题而不是答案,我还是对它投了赞成票,因为这是一个非常好的问题。我很想知道OP中产生结果的表结构和查询是什么样子的。