转换失败:将varchar值转换为数据类型int时失败。

4

我想在我的SQL语句中将值乘以100。

但是它显示错误,如下:Conversion failed when converting the varchar value 0.0035 to data type int。

我知道这个值是varchar类型的。但是我想要将其乘以100。

这是我的原始查询代码:

@WalCalc as VARCHAR(20) = NULL,
Set @SQLQuery = @SQLQuery + 'CAST(   (ISNULL(DI.Coupon,0)) AS varchar(50)) AS ''Coupon'',

以及转换后的查询

Set @SQLQuery = @SQLQuery + 'CAST(   (ISNULL(DI.Coupon,0) * 100) AS Decimal(18,3)) AS ''Coupon'',

请有人帮帮我


DI.Coupon的数据类型是什么? - DineshDB
varchar @dinesh - Aravindhan R
请提供“优惠券”列的一些样本数据。 - Tim Biegeleisen
优惠券 0.0702, 0.0218, 0.008, 0.0169, 0.0259, 0.0067, 0.0134, 0.0156, 0.0183, 0.0252, 0.0351 - Aravindhan R
3个回答

3

我认为您应该先将Coupon列转换为十进制,然后再乘以100:

Set @SQLQuery = @SQLQuery + 'ISNULL(CAST(DI.Coupon AS Decimal(18, 3)), 0.0) * 100 AS ''Coupon'',

什么错误?Coupon列中是否有前导或尾随空格? - Tim Biegeleisen
不要在时间表中加入空格。 - Aravindhan R
@AravindhanR 我已经使用字符串文字优惠券十进制值测试了我答案中的片段,并且在所有情况下似乎都可以工作。看到一些实际数据会很有帮助。只要您无法提供此方法无法正常工作的数据,我将保留此答案。 - Tim Biegeleisen

3

试试这个方法,

首先将你的优惠券值CASTNUMERIC类型,然后进行乘法运算:

Set @SQLQuery = @SQLQuery + 'CAST(   (ISNULL(CAST(DI.Coupon AS NUMERIC(18,3)),0) * 100) AS Decimal(18,3)) AS Coupon

这是我执行的代码:

SELECT CAST((ISNULL(CAST('0.0702' AS NUMERIC(18,5)),0) * 100) AS Decimal(18,3)) AS Coupon

输出:

Coupon
7.020

它显示错误,关键字“AS”附近语法不正确。 - Aravindhan R
1
如果答案可以解决问题,请接受它。这将对其他人有所帮助。 - DineshDB
@DineshDB 你好Dinesh,我可以问一下为什么你选择做两个转换而不是一个吗? - Tim Biegeleisen
@DineshDB,你能把你的邮件地址发给我吗?我的邮箱是aravindhan32@outlook.com。以后如果我有任何疑问,我可以联系你。 - Aravindhan R
@AravindhanR,您只需执行这两个查询,就可以理解它们之间的区别:SELECT CAST((ISNULL(CAST('0.0702' AS NUMERIC(18,5)),0) * 100) AS Decimal(18,3)) AS Coupon SELECT ISNULL(CAST('0.0702' AS NUMERIC(18,3)),0) * 100 AS Coupon - DineshDB
@AravindhanR,好的,我会发送我的邮件地址。 - DineshDB

2

应该是这样的

Set @SQLQuery = @SQLQuery + 'CAST((ISNULL(DI.Coupon,0) ) AS Decimal(18,3)) * 100 AS ''Coupon'',

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