如何在SQL Server中将列强制转换为十进制类型

本文关键字:转换 类型 十进制 SQL Server | 更新日期: 2023-09-27 18:12:07

tablesAA有两列,amountdecimal (28,10), amountscaleint

我需要将amount转换为decimal [ (p[ ,s] )]

's'是动态的,从amountscale列的值,但底部的代码导致语法错误。

那么,如何根据amountscale值进行amount的强制转换?

select 
    amount, amountscale,
    cast(amount as decimal(28, amountscanle)) as amount 
from tablesAA

如何在SQL Server中将列强制转换为十进制类型

唉,对于cast(),比例和精度需要是常量。

如果您只想要特定比例和精度的数据输出,那么您可以使用str()(文档在这里)将它们转换为字符串:

select amount, amountscanle,
       str(amount, 28, amountscanle) as amount2
from tablesAA;

另一种方法是暴力破解方法:

select amount, amountscanle,
       (case when amountscanle = 0 then cast(amount as decimal(28, 0)
             when amountscanle = 1 then cast(amount as decimal(28, 1)
             when amountscanle = 2 then cast(amount as decimal(28, 2)
             . . . 
        end) as amount2
from tablesAA;