将 Varchar 转换为浮点数失败
Failed Convert Varchar to a Float
我有一个 table 混合数据,它是 Varchar 类型,但我有数字和一些字符串,它们是 Building
和 IBS
。但是我正试图摆脱这些字符串。我只知道如何摆脱一个。当我尝试添加另一个时,它抱怨争论,我该怎么做。
ROUND( ISNULL( CASE
WHEN [lentgth] IN( 'Building', '', 'IBS', '') THEN 0
ELSE CONVERT(FLOAT, REPLACE([lentgth], 'm', 'i'))
END, 0 ), 0 )
在SQL Server 2012+中,您可以使用TRY_CONVERT()
:
TRY_CONVERT(FLOAT, REPLACE([lentgth], 'm', 'i'))
这个returnsNULL
如果转换不了。如果你想要 0
,请使用 COALESCE()
或 IFNULL()
:
ISNULL(TRY_CONVERT(FLOAT, REPLACE([lentgth], 'm', 'i')), 0)
COALECE()
对第一个参数求值两次(我认为这是一个 MS SQL 性能错误)。因此,当第一个参数是函数 all 或子查询时,ISNULL()
更可取。
您可以使用isnumeric函数:
ROUND(cast(case
when isnumeric(lentgth) = 0 then 0
else lentgth
end as float)
, 0)
我有一个 table 混合数据,它是 Varchar 类型,但我有数字和一些字符串,它们是 Building
和 IBS
。但是我正试图摆脱这些字符串。我只知道如何摆脱一个。当我尝试添加另一个时,它抱怨争论,我该怎么做。
ROUND( ISNULL( CASE
WHEN [lentgth] IN( 'Building', '', 'IBS', '') THEN 0
ELSE CONVERT(FLOAT, REPLACE([lentgth], 'm', 'i'))
END, 0 ), 0 )
在SQL Server 2012+中,您可以使用TRY_CONVERT()
:
TRY_CONVERT(FLOAT, REPLACE([lentgth], 'm', 'i'))
这个returnsNULL
如果转换不了。如果你想要 0
,请使用 COALESCE()
或 IFNULL()
:
ISNULL(TRY_CONVERT(FLOAT, REPLACE([lentgth], 'm', 'i')), 0)
COALECE()
对第一个参数求值两次(我认为这是一个 MS SQL 性能错误)。因此,当第一个参数是函数 all 或子查询时,ISNULL()
更可取。
您可以使用isnumeric函数:
ROUND(cast(case
when isnumeric(lentgth) = 0 then 0
else lentgth
end as float)
, 0)