SQL Server CONVERT(NUMERIC(18,0),'')失败,但CONVERT(INT,'')成功了吗?

时间:2009-11-27 18:17:56

标签: sql sql-server numeric-conversion

PRINT CONVERT(NUMERIC(18,0), '')

生成Error converting data type varchar to numeric.

然而,

PRINT CONVERT(INT, '')

生成0但没有错误......

问题:是否有一些SQL Server标志或我是否需要为每个varchar到数字转换执行case语句? (除了显而易见的原因?)

3 个答案:

答案 0 :(得分:8)

使用ISNUMERIC

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解决此问题。