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