SQL 服务器使用变量定义小数位
SQL Server use variable to define decimal places
我有这个问题:我有一个名为 Quantity
的列,声明为 DECIMAL(10, 2)
,如果我执行此查询:
SELECT Quantity
FROM myTable
我得到这样的值:123.00
我有另一个 table 用于存储我的配置内容,其中之一是小数位,我希望用它来转换列。
但是这个查询不起作用:
DECLARE @DECIMAL_PLACES INTEGER
SELECT @DECIMAL_PLACES = CAST(sConfigValue AS INT)
FROM dtConfig
WHERE sConfig = 'DecimalPlaces'
-- @DECIMAL_PLACES have a value of 1 for example:
SELECT
CONVERT(DECIMAL(10, @DECIMAL_PLACES), Quantity) AS QuantityFormatted
FROM
myTable
我收到一个错误
@DECIMAL_PLACES
is not an INTEGER
可以这样做吗?
谢谢
可以使用动态 SQL 吗?
DECLARE @DECIMAL_PLACES INTEGER
SELECT @DECIMAL_PLACES = CAST(sConfigValue AS INT) FROM dtConfig
WHERE sConfig = 'DecimalPlaces'
-- @DECIMAL_PLACES have a value of 1 for example:
DECLARE @SQL NVARCHAR(MAX)
SET @SQL = N'SELECT CONVERT(DECIMAL(10, ' + CAST(@DECIMAL_PLACES AS NVARCHAR(20)) + N'), Quantity) AS QuantityFormatted FROM myTable'
EXEC (@SQL)
不过,最好在客户端进行格式化。
我找到了一个棘手的解决方案,可以避免使用动态 SQL:
DECLARE @DECIMAL_PLACES INTEGER
SELECT @DECIMAL_PLACES = CAST(sConfigValue AS INT)
FROM dtConfig
WHERE sConfig = 'DecimalPlaces'
-- @DECIMAL_PLACES have a value of 1 for example:
SELECT
LTRIM(STR(ROUND(Quantity, @DECIMAL_PLACES), 10, @DECIMAL_PLACES)) AS QuantityFormatted
FROM
myTable
希望这对大家有用:)
谢谢
我有这个问题:我有一个名为 Quantity
的列,声明为 DECIMAL(10, 2)
,如果我执行此查询:
SELECT Quantity
FROM myTable
我得到这样的值:123.00
我有另一个 table 用于存储我的配置内容,其中之一是小数位,我希望用它来转换列。
但是这个查询不起作用:
DECLARE @DECIMAL_PLACES INTEGER
SELECT @DECIMAL_PLACES = CAST(sConfigValue AS INT)
FROM dtConfig
WHERE sConfig = 'DecimalPlaces'
-- @DECIMAL_PLACES have a value of 1 for example:
SELECT
CONVERT(DECIMAL(10, @DECIMAL_PLACES), Quantity) AS QuantityFormatted
FROM
myTable
我收到一个错误
@DECIMAL_PLACES
is not an INTEGER
可以这样做吗?
谢谢
可以使用动态 SQL 吗?
DECLARE @DECIMAL_PLACES INTEGER
SELECT @DECIMAL_PLACES = CAST(sConfigValue AS INT) FROM dtConfig
WHERE sConfig = 'DecimalPlaces'
-- @DECIMAL_PLACES have a value of 1 for example:
DECLARE @SQL NVARCHAR(MAX)
SET @SQL = N'SELECT CONVERT(DECIMAL(10, ' + CAST(@DECIMAL_PLACES AS NVARCHAR(20)) + N'), Quantity) AS QuantityFormatted FROM myTable'
EXEC (@SQL)
不过,最好在客户端进行格式化。
我找到了一个棘手的解决方案,可以避免使用动态 SQL:
DECLARE @DECIMAL_PLACES INTEGER
SELECT @DECIMAL_PLACES = CAST(sConfigValue AS INT)
FROM dtConfig
WHERE sConfig = 'DecimalPlaces'
-- @DECIMAL_PLACES have a value of 1 for example:
SELECT
LTRIM(STR(ROUND(Quantity, @DECIMAL_PLACES), 10, @DECIMAL_PLACES)) AS QuantityFormatted
FROM
myTable
希望这对大家有用:)
谢谢