将 Varchar 转换为浮点数失败

Posted

技术标签:

【中文标题】将 Varchar 转换为浮点数失败【英文标题】:Failed Convert Varchar to a Float 【发布时间】:2016-09-06 12:17:54 【问题描述】:

我有一个混合了数据的表,它的类型是 Varchar,但我有数字和一些字符串,它们是 BuildingIBS。但是我正在尝试摆脱字符串。我只知道如何摆脱一个。当我尝试添加另一个时,它抱怨参数,我该怎么做。

ROUND( ISNULL( CASE 
                  WHEN [lentgth] IN( 'Building', '', 'IBS', '') THEN 0 
                  ELSE CONVERT(FLOAT, REPLACE([lentgth], 'm', 'i')) 
               END, 0 ), 0 )

【问题讨论】:

当文本包含非数字字符时,您根本无法将文本转换为浮点数。 当值应该是浮点数时,它是否有一个点或逗号作为十进制分隔符?我相信它必须是一个点,所以你检查过吗? 你能给我们一些样本数据吗? 我已经使用了 isumeric 函数并且它的工作。谢谢。 【参考方案1】:

你可以使用isnumeric函数:

ROUND(cast(case
            when isnumeric(lentgth) = 0 then 0 
            else lentgth
           end as float)
     , 0)

【讨论】:

这几乎适用于任何值,但要注意确实存在几个单字符值会导致此失败,包括 . (点)和 ,(逗号)。见blogs.msdn.microsoft.com/manub22/2013/12/23/…【参考方案2】:

在 SQL Server 2012+ 中,您可以使用TRY_CONVERT()

TRY_CONVERT(FLOAT, REPLACE([lentgth], 'm', 'i'))

如果无法完成转换,则返回 NULL。如果你想要0,请使用COALESCE()IFNULL()

ISNULL(TRY_CONVERT(FLOAT, REPLACE([lentgth], 'm', 'i')), 0)

COALECE() 两次评估第一个参数(我认为这是 MS SQL 性能错误)。因此,当第一个参数是函数 all 或子查询时,ISNULL() 更可取。

【讨论】:

以上是关于将 Varchar 转换为浮点数失败的主要内容,如果未能解决你的问题,请参考以下文章

将作为varchar存储的数字10与浮点数1.1进行比较,会因算术溢出错误而失败

Numpy 错误“无法将字符串转换为浮点数:'Illinois'”

为啥 PollingIntervalTest test_getlastupdate_no_change 在 Sonos Self-Test Suite 中因错误“无法将字符串转换为浮点数”而失败

无法将数组转换为浮点数python

sklearn-LinearRegression:无法将字符串转换为浮点数:'--'

ValueError:无法将字符串转换为浮点数:'GIAC'