将nvarchar转换为int bigint时转换失败。

3
希望这很清晰。我正在尝试将一列转换为int类型,以便可以对其求和。
SELECT (cast(RTRIM(pricing_prices)as int)) FROM returnxx where RMAid= '5'

错误

将 nvarchar 值“9.8000000000000007”转换为 int 数据类型时转换失败。

如果我尝试使用 bigint 我会得到另一个错误

将 nvarchar 值转换为 bigint 数据类型时发生错误。


请尝试使用FLOOR - Thom A
SELECT TRY_CONVERT(INT, pricing_prices) FROM returnxx WHERE RMAid= '5' 返回错误信息:'TRY_CONVERT' 不是已识别的内置函数名。 - Emma
INTBIGINT是整数,如果您想保留小数位,应该查看NUMERICDECIMAL - Mark Sinkinson
2个回答

3

首先将其转换为Numeric,然后再转换为INT。 尝试这样做:

DECLARE @Var varchar(100)='9.8000000000000007' 
SELECT CAST(CAST(@Var AS NUMERIC(35,16)) AS INT)

结果:

9

如果您想要“ROUND”值,只需将其转换为数字:
SELECT CAST(@Var AS NUMERIC)

结果:

10

如果您需要 DECIMAL 值,只需将其转换为数字即可:
SELECT CAST(@Var AS NUMERIC(8,2))

结果:

9.80

我需要将其舍入到2位小数,因为它是一个价格。 - Emma
@Emma 你需要 9.80,对吗? - DineshDB
@Emma,欢迎你..! - DineshDB

1

我曾经遇到过这个问题。我能够通过先将该列转换为decimal,然后再将其转换为整数来解决它。您可以将其转换为任何您选择的十进制数。

DECLARE @pricing_prices NVARCHAR(20)='9.8000000000000007' AS pricing_prices

SELECT  CAST(CAST(@pricing_prices AS DECIMAL(9,2)) AS INT)

输出

pricing_prices
9

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接