2013-02-19 75 views
3

和SO搜查,并不能弄明白
试了每个字段FLOAT铸造无济于事,转换并没有得到我任何进一步
我怎样才能得到下面的case子句返回THEN部分中所述的值?错误转换数据类型为varchar浮动搜索

错误: Msg 8114,Level 16,State 5,Line 1 将数据类型varchar转换为float时出错。我的SQL查询的

部分,它使错误:

When cust_trendd_w_costsv.terms_code like '%[%]%' and (prod.dbo.BTYS2012.average_days_pay) - (substring(cust_trendd_w_costsv.terms_code,3,2)) <= 5 THEN prod.dbo.cust_trendd_w_costsv.terms_code 

average_days_pay =浮动
terms_code =焦炭

干杯!

+0

请发布您的查询中使用的两个字段的数据样本。 – 2013-02-19 07:45:45

+1

东西在子串(cust_trendd_w_costsv。terms_code,3,2)表达包含用于转换 – 2013-02-19 07:47:12

回答

5

尝试请使用ISNUMERIC来处理无法转换的字符串:

When cust_trendd_w_costsv.terms_code like '%[%]%' 
and (prod.dbo.BTYS2012.average_days_pay) - 

(case when isnumeric(substring(cust_trendd_w_costsv.terms_code,3,2))=1 
     then cast(substring(cust_trendd_w_costsv.terms_code,3,2) as float) 
     else 0 
end) 
<= 5 THEN prod.dbo.cust_trendd_w_costsv.terms_code 
+0

你是男人的valex!直接复制/粘贴修复! – user2086052 2013-02-19 08:09:10

1

如果您确信子串部分返回一个数值,您可以施放子(....)为浮动:

.....and (prod.dbo.BTYS2012.average_days_pay) - (CAST(substring(cust_trendd_w_costsv.terms_code,3,2)) as float) <= 5 .... 
+0

样本数据不当值 terms_code: NULL 1%1030 1%1560 1%30 1%3045 1%45 2%1030 2%1045 2 %1060 CA CC DUR LEGALA NET10 NET30 NET45 NET60 average_days_pay: 46.975 46.5555555555556 32.2 123.5 65.625 40.75 54.6 95.3333333333333 126.666666666667 14.741935483871 54.7894736842105 44.6153846153846 31.2307692307692 77.9583333333333 57.5 33.8829268292683 67.75 – user2086052 2013-02-19 07:58:19

3

,你所遇到的问题是,你明确搜索包含%字符的字符串,然后将它们(隐式或显式地)转换为浮点。

但是包含%标志的字符串不能转换为浮点数,但它们仍然有%。这也产生了一个错误:

select CONVERT(float,'12.5%') 

如果你想转换为浮动,则需要先卸下%标志,是这样的:

CONVERT(float,REPLACE(terms_code,'%','')) 

只会消除它。我不确定您的terms_code列中是否还有任何其他字符可能会导致此问题。

您还需要知道,SQL Server可以非常积极地重新排序操作,因此可能会尝试在terms_code中的其他字符串上执行上述转换,即使那些不包含%的字符串也是如此。如果这是你错误的根源,那么你需要防止这种积极的重新排序。如果没有涉及到聚合,CASE表达式通常可以避免最糟糕的问题 - 请确保在尝试转换之前删除以前的WHEN子句中不想处理的所有字符串

+0

发布一些示例数据 - 似乎不喜欢我可以改变百分号:/ – user2086052 2013-02-19 08:02:58

+1

@ user2086052 - 仅供将来参考,请勿在评论中发布样本数据 - *编辑*您的问题。然后,您可以使用那里的工具来格式化数据,以便我们可以将其实际读为表格。 – 2013-02-19 08:15:20

相关问题