6

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

生产 Error converting data type varchar to numeric.

然而,

PRINT CONVERT(INT, '')

产生 0没有错误...

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

4

3 回答 3

8

使用ISNUMERIC

declare @a varchar(20)
set @a = 'notanumber'
select case when isnumeric(@a) = 0 then 0 else convert(numeric(18,0),@a) end
于 2009-11-27T18:37:58.353 回答
2

ISNUMERIC 并不总是像您预期的那样工作:特别是对于一些随后无法转换为数字的值,它会返回 True。

本文描述了该问题并建议如何使用 UDF 解决该问题。

于 2009-11-28T12:33:40.910 回答
2

对于 float 和 int 类型,空字符串将转换为零,但不会转换为十进制。(并转换为 1900 年 1 月 1 日,因为日期时间 = 零)。不知道为什么。。就是这样。。

如果您需要小数(18,0),请改用 bigint。或先通过浮动投射

ISNUMERIC 将接受-and作为数字,但都无法转换为十进制.1.2E3

于 2009-11-28T09:58:47.617 回答