将Varchar转换为浮点失败

时间:2016-09-06 12:17:54

标签: sql sql-server database tsql isnumeric

我有一个数据混合的表,它的类型为Varchar,但我有数字和一些字符串BuildingIBS。但是,我试图摆脱弦乐。我只知道如何摆脱一个。当我试图添加另一个时,它抱怨争论,我该怎么做。

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

2 个答案:

答案 0 :(得分:2)

您可以使用isnumeric功能:

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

答案 1 :(得分:1)

在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()更可取。