SQL Server ROUND无法正常工作

时间:2018-06-12 07:34:07

标签: sql sql-server tsql

我有一个表格,其中一列是Pricedecimal(18,9)),另一列是Volumebigint)。

我将这两个值相乘然后应用round函数但没有任何效果。

我希望它是2位小数精度。怎么做?

SELECT 
    CAST((Price * Volume) AS decimal(38,2)) test1, 
    ROUND((Price * Volume), 2) 'VolumePrice',  
    CONVERT(DOUBLE PRECISION, (Price * Volume)) 'test2' 
FROM a

表值是这样的:

    Price           Volume
    -------------------------
    63.380000000    131729
    63.380000000     61177
    44.860000000    246475
    44.860000000    246475
    44.860000000     63937
    97.990000000     84620
    191.650000000   438821

我想简单地将价格乘以音量,以获得总价值金额。

2 个答案:

答案 0 :(得分:4)

mvn clean install只是向上或向下更改小数值,不会更改数据类型精度。

您想要的是以2为标度转换为ROUND()

DECIMAL

将较高比例(SELECT CONVERT(DECIMAL(18,2), Price * Volume) AS DecimalConversion FROM A )的小数转换为较低的小数将自动舍入最后一位数字:

Price * Volume

答案 1 :(得分:1)

当运算符组合了两种不同数据类型的表达式时,数据类型优先级的规则指定优先级较低的数据类型转换为优先级较高的数据类型

来源 MSDN docs

在SQL Server中,有问题的数据类型的优先顺序是:

  1. 小数
  2. BIGINT
  3. 因此bigint被转换为隐式转换为十进制。

    如果您需要所需的结果,只需执行

    即可
    SELECT 
    VolumePrice= cast(Price * Volume as decimal(18,2) ) 
    FROM a
    

    See working demo