转换为float时,空字符串应为NULL

时间:2018-06-12 07:31:07

标签: sql sql-server string tsql

考虑以下TSQL代码:

declare @a nvarchar(500) = N''
select try_convert(float, @a)

输出结果为:

0

我需要输出为NULL。

我可以这样做:

declare @a nvarchar(500) = N''
select case @a
           when '' then null
           else try_convert(float, @a)
       end

它工作得很好。

然而,这只是一个模型。在我的现实生活场景中,代替@a,有超过200个NVARCHAR(500)列,浮点数或零长度字符串。我需要一种快速方法将零长度字符串转换为NULL(以及其他所有要浮动的内容),可能无需构建200个单独的CASE语句。

2 个答案:

答案 0 :(得分:3)

您应该使用Try_parse

declare @a nvarchar(500) = N''
select try_parse( @a as float)

返回

NULL

See working demo

答案 1 :(得分:3)

依靠try_parse()try_convert() / try_cast()之间相当难以理解的差异,我并不十分激动。相反,我会去:

try_convert(float, nullif(@a, ''))

这也有一个优势,就是你要完成的任务非常明确。