在[Return rate]
列中,我的值如下:
20.0%
17.1%
etc
在我的查询中,我想在计算中使用此值。
首先,我将'%'
替换为空字符串''
:
REPLACE([Return Rate], '%' ,'') AS [Test]
这样可行,当[返回率]为'20 .0%'时,我得到的值为'20 .0'。
然后我尝试在计算中使用此[Test]值,例如:
(REPLACE([Return Rate], '%' ,'') * 10) AS [Test]
但我逻辑上得到一个错误,所以我尝试转换这个文本值来执行我的计算:
CAST ( REPLACE([Current Xelus FE Return Rate], '%' ,'') AS decimal(2,1)) [Decimal Test]
在这里我得到了错误:
Arithmetic overflow error converting varchar to data type numeric. Warning: Null value is eliminated by an aggregate or other SET operation.
有人得到这个错误的答案吗? 非常感谢,
答案 0 :(得分:0)
如果您的任何行包含空值,您将收到此错误。试试IsNull,像这样:
CAST(
IsNull(
REPLACE([Current Xelus FE Return Rate], '%' ,'')
, '0.0')
AS decimal(5,1)) [Decimal Test]
如果您的数据包含非数字值(如您所提到的,像'N / A'这样的值),您可以使用IsNumeric()函数来消除它们:
CAST(
CASE WHEN IsNumeric(
IsNull(
REPLACE([Current Xelus FE Return Rate], '%' ,'')
, '0.0')
) = 1 THEN IsNull(REPLACE([Current Xelus FE Return Rate], '%' ,''),'0.0')
ELSE '0.0'
END
AS decimal(5,1)) [Decimal Test]
答案 1 :(得分:-1)
尝试将其强制转换为FLOAT - 十进制(2,1)是不够的:
CAST ( REPLACE([Current Xelus FE Return Rate], '%' ,'') AS FLOAT)
然后你应该能够做进一步的计算
CAST ( REPLACE([Current Xelus FE Return Rate], '%' ,'') AS FLOAT) * 10