使用动态变量舍入小数值
Rounding a decimal value with dynamic variable
我需要在 SQL 函数中根据 table B 中的另一列舍入 table A 中的列值。
DECLARE @currencyround INT
SELECT @currencyround = ISNULL(currencyround, 2)
FROM dbo.PRTL_currencySettings
当我像下面这样直接将 @currencyround
的值放入查询中时,它工作正常:
SELECT
CAST(POS.BALANCE AS DECIMAL(18, 2)) AS DBAmount
FROM
dbo.POS_SALES POS
当我像下面这样输入 @currencyround
的值时,它显示错误:
Incorrect syntax near '@currencyround'.
SELECT
CAST(POS.BALANCE AS DECIMAL(18, @currencyround)) AS DBAmount
FROM
dbo.POS_SALES POS
你有什么不明白的?类型定义不允许变量。您可以使用动态 SQL 来做到这一点,但这似乎有些矫枉过正。
如果您关心变量的输出方式,请使用 str()
或 format()
创建您想要的格式。
如果您需要特定的元数据,您可以使用动态 SQL:
DECLARE @currencyround int;
SELECT @currencyround=ISNULL(currencyround,2) FROM dbo.PRTL_currencySettings;
DECLARE @sql NVARCHAR(MAX) =
N'select CAST(POS.BALANCE AS DECIMAL(18,<currencyround>)) AS DBAmount
FROM dbo.POS_SALES POS';
SET @sql = REPLACE(@sql, '<currencyround>', @currencyround);
EXEC(@sql);
但我个人不会写这样的代码。我宁愿在应用层格式化数字。
如果你需要四舍五入值,那么这个怎么样:
ROUND(POS.BALANCE, @currencyround)
我需要在 SQL 函数中根据 table B 中的另一列舍入 table A 中的列值。
DECLARE @currencyround INT
SELECT @currencyround = ISNULL(currencyround, 2)
FROM dbo.PRTL_currencySettings
当我像下面这样直接将 @currencyround
的值放入查询中时,它工作正常:
SELECT
CAST(POS.BALANCE AS DECIMAL(18, 2)) AS DBAmount
FROM
dbo.POS_SALES POS
当我像下面这样输入 @currencyround
的值时,它显示错误:
Incorrect syntax near '@currencyround'.
SELECT
CAST(POS.BALANCE AS DECIMAL(18, @currencyround)) AS DBAmount
FROM
dbo.POS_SALES POS
你有什么不明白的?类型定义不允许变量。您可以使用动态 SQL 来做到这一点,但这似乎有些矫枉过正。
如果您关心变量的输出方式,请使用 str()
或 format()
创建您想要的格式。
如果您需要特定的元数据,您可以使用动态 SQL:
DECLARE @currencyround int;
SELECT @currencyround=ISNULL(currencyround,2) FROM dbo.PRTL_currencySettings;
DECLARE @sql NVARCHAR(MAX) =
N'select CAST(POS.BALANCE AS DECIMAL(18,<currencyround>)) AS DBAmount
FROM dbo.POS_SALES POS';
SET @sql = REPLACE(@sql, '<currencyround>', @currencyround);
EXEC(@sql);
但我个人不会写这样的代码。我宁愿在应用层格式化数字。
如果你需要四舍五入值,那么这个怎么样:
ROUND(POS.BALANCE, @currencyround)