我想将 Varchar 列中的数据转换为数字数据类型 -
所以在转换之前我调用 ISNUMERIC 函数来检查数据是否为数字,如果是则将其转换为数字数据类型。但我面临一个问题 -
IsNumeric 函数的行为不符合预期 -
- IsNumeric(x) returns true - when varchar value has both comma and a tab character (Char(9)),
- IsNumeric(x) returns false - when varchar value has only tab character and no comma
它在以下 SQL 的帮助下进行了解释-
DECLARE @propValue AS VARCHAR(50)
SET @propValue = '1,592 ' -- contains comma + tab (Char(9))
SELECT ISNUMERIC(@propValue) -- Returns 1
--If ISNUMERIC func returns true for this value, lets convert this Varchar value to Numeric
SELECT CAST(@propValue AS Numeric(19, 4)) -- :-( Error converting data type varchar to numeric.
我用谷歌搜索并找到了解决这个问题的各种解决方案 -
--Solution 1: use 'e0'
SELECT ISNUMERIC(@propValue + 'e0') -- Returns 0
--Solution 2: remove comma before calling IsNumeric()
SELECT ISNUMERIC(REPLACE(@propValue, ',', '')) -- Returns 0
--Solution 3
--Call CLR function to parse Varchar value
在上述情况下推荐的解决方案是什么?为什么?
另外,如果有人能解释为什么 IsNumeric(x) 返回 false - 当 varchar 值只有制表符而没有逗号时,我将不胜感激?
谢谢!