我有一个表格,其中一列是Price
(decimal(18,9)
),另一列是Volume
(bigint
)。
我将这两个值相乘然后应用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
我想简单地将价格乘以音量,以获得总价值金额。
答案 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中,有问题的数据类型的优先顺序是:
因此bigint被转换为隐式转换为十进制。
如果您需要所需的结果,只需执行
即可SELECT
VolumePrice= cast(Price * Volume as decimal(18,2) )
FROM a
的 See working demo 强>