一位读者最近询问了他们遇到的转换数据类型错误的错误。由于这是一个常见问题,特别是当数字数据与VARCHAR数据类型一起存储时,我想你会很感激我与他们分享的答案。
我正在使用Windows 10和SQL SMS 2014。当我运行查询时,我收到以下错误消息:
“将数据类型varchar转换为float时出错。”您可以帮助解决此错误消息吗?
通常当SQL尝试将数字(例如1.25)从文本转换为float时,它可以轻松地执行此操作; 但是,如果值中存在一些非数字字符,它会挂起并会抛出转换数据的错误。
例如,转换1.25会起作用,但转换$1.25不会,因为服务器不知道如何处理“$”。
我怀疑你在试图转换的列中有一些数据不是“纯粹”数字。
如果您浏览数据,我会在那里看到一些字母数据。
以下是您可以在查询编辑器中尝试的一些示例:
--EXAMPLES
DECLARE @myText as varchar(20)
DECLARE @myFloat as Money
--This Works! :)
Print 'Try 1.20 * 1.10'
SET @myText = '1.20'
SET @myFloat = @myText * 1.10
Print @myFloat
--This Will throw an error :(
PRINT 'Try $1.20 * 1.10'
SET @myText = '$1.20'
SET @myFloat = @myText * 1.10
Print @myFloat
根据您尝试对数据执行的操作(例如在查询中使用它),您可能必须使用IIF函数与ISNUMERIC一起测试是否可以转换列值,如果不能,则显示另一个合适的价值。
如果测试的值是数字,则ISNUMERIC函数返回1; 否则为0。它可用于预先测试字符是否可以测试数字数据类型。
这是一个例子:
SELECT IIF(ISNUMERIC(myTexttoFloatColumn) = 1,
myTextToFloatColumn*1.50,
myTexttoFloatColumn)
FROM mySampleTable
如果列可以转换为数字,或者只显示原始值,则可以将coloumn乘以1.5。
原文地址:https://www.codeproject.com/Articles/1279823/How-do-I-handle-a-Error-converting-data-type-error