我有下面的数据,我想乘在一起,a列乘以b列得到c列。a的数据类型为string,b的数据类型为long。
A B16% 89415% 200
A B
16% 894
15% 200
我在查询中尝试过这个表达式 cast(A as int)*B 但这给了我一个错误。
cast(A as int)*B
jexiocij1#
在尝试强制转换之前,需要删除“%”符号。假设你真的想计算这个百分比,那么你还需要除以100.00。
cast(replace(A,'%','') as int)/100.00*B
注意:您需要使用 100.00 而不是 100 强制十进制算术而不是整数。或者可以将其转换为十进制(9,2)而不是int-任何一种方法都可以确保得到准确的结果。您可能希望减少返回的小数点的数量,在这种情况下,您可以将其转换回所需的数据类型。
100.00
100
cast(cast(replace(A,'%','') as int)/100.00*@ as decimal(9,2))
注: decimal(9,2) 这只是一个例子-你可以使用任何精度和规模你需要的。
decimal(9,2)
wljmcqd82#
你可以在下面试试-
select cast(left(A, patindex('%[^0-9]%', A+'.') - 1) as int)*Bfrom tablename
select cast(left(A, patindex('%[^0-9]%', A+'.') - 1) as int)*B
from tablename
4si2a6ki3#
在sqlserver中强制转换的语法是 CAST(expression AS TYPE); 由于无法将“%”转换为整数,因此必须用空字符替换它,如下所示:
CAST(expression AS TYPE);
SELECT cast(replace(A,'%','') AS int);
最后你可以写如下:
SELECT (cast(replace(A,'%','') AS int)/100.00)*B as C;
3条答案
按热度按时间jexiocij1#
在尝试强制转换之前,需要删除“%”符号。假设你真的想计算这个百分比,那么你还需要除以100.00。
注意:您需要使用
100.00
而不是100
强制十进制算术而不是整数。或者可以将其转换为十进制(9,2)而不是int-任何一种方法都可以确保得到准确的结果。您可能希望减少返回的小数点的数量,在这种情况下,您可以将其转换回所需的数据类型。
注:
decimal(9,2)
这只是一个例子-你可以使用任何精度和规模你需要的。wljmcqd82#
你可以在下面试试-
4si2a6ki3#
在sqlserver中强制转换的语法是
CAST(expression AS TYPE);
由于无法将“%”转换为整数,因此必须用空字符替换它,如下所示:最后你可以写如下: