在SO上搜索和搜索,无法弄明白 尝试将每个字段作为FLOAT进行铸造无济于事,转换并没有让我更进一步 如何获得以下case子句以返回THEN部分中所述的值?
错误: 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 = float
terms_code = char
干杯!
答案 0 :(得分:8)
尝试使用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
答案 1 :(得分:3)
您遇到的问题是您专门搜索包含%
字符的字符串,然后将它们(隐式或显式)转换为float。
但是包含%
符号的字符串无法转换为浮点数,但它们中仍然包含%
。这也会产生错误:
select CONVERT(float,'12.5%')
如果您想要转换为浮点数,则需要首先移除%
符号,例如:
CONVERT(float,REPLACE(terms_code,'%',''))
将消除它。我不确定您的terms_code
列中是否还有其他字符可能会将其绊倒。
您还需要注意,SQL Server可以非常积极地重新排序操作,因此可以尝试对terms_code
中的其他字符串进行上述转换,即使那些不包含%
的字符串也是如此。如果这是您的错误的来源,那么您需要防止这种积极的重新排序。如果没有涉及聚合,CASE
表达式通常可以避免最严重的问题 - 确保在您尝试之前,之前的WHEN
子句消除了您不想处理的所有字符串你的转换
答案 2 :(得分:1)
如果你确定Substring Part返回一个数值,你可以将子串(....)转换为Float:
.....and (prod.dbo.BTYS2012.average_days_pay) - (CAST(substring(cust_trendd_w_costsv.terms_code,3,2)) as float ) <= 5 ....