【发布时间】:2012-07-01 15:48:16
【问题描述】:
我想将 Varchar 列中的数据转换为 Numeric 数据类型 -
所以在转换之前,我调用 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 值只有制表符而没有逗号时,我将不胜感激?
谢谢!
【问题讨论】:
标签: sql sql-server isnumeric