PRINT CONVERT(NUMERIC(18,0), '')
生成Error converting data type varchar to numeric.
然而,
PRINT CONVERT(INT, '')
生成0
但没有错误......
问题:是否有一些SQL Server标志或我是否需要为每个varchar到数字转换执行case语句? (除了显而易见的原因?)
答案 0 :(得分:8)
declare @a varchar(20)
set @a = 'notanumber'
select case when isnumeric(@a) = 0 then 0 else convert(numeric(18,0),@a) end
答案 1 :(得分:2)
对于float和int类型,空字符串将转换为零,但不是十进制。 (并转换为1900年1月1日的日期时间=零)。我不知道为什么......它只是......
如果需要小数(18,0),请改用bigint。或先通过浮动投射
ISNUMERIC会接受-
和.
以及1.2E3
作为数字,但都无法转换为小数。
答案 2 :(得分:2)
ISNUMERIC并不像您期望的那样工作:特别是对于某些随后无法转换为数字的值,它返回True。
This article描述了该问题,并建议如何使用UDF解决此问题。