考虑以下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语句。
答案 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, ''))
这也有一个优势,就是你要完成的任务非常明确。