【发布时间】:2009-02-20 15:48:44
【问题描述】:
假设以下数据:
Column1 (data type: varchar(50))
--------
11.6
-1
1,000
10"
Non-Numeric String
我有一个查询,它正在从该列中提取数据,并想确定该值是否为数字,然后在我的查询中返回它。所以我正在做以下事情
SELECT CASE
WHEN IsNumeric(Replace(Column1, '"', '')) = 1 THEN Replace(Column1, '"', '')
ELSE 0
END AS NumericValue
SQL 正在报告:
将 varchar 值“11.6”转换为数据类型 int 时转换失败。
为什么?我也尝试过强制转换:
SELECT CASE
WHEN IsNumeric(Replace(Column1, '"', '')) = 1 THEN cast(Replace(Column1, '"', '') AS float)
ELSE 0
END AS NumericValue
我得到了:
将数据类型 varchar 转换为 float 时出错。
【问题讨论】:
-
IsNumeric()将接受双精度/浮点/单精度等。此外,它不检查溢出(99999999999999999999999999999是数字,不会转换为大多数数字类型)。这种情况的最佳做法是,您首先不要将数字数据存储在字符串字段中。
标签: sql sql-server tsql