【发布时间】:2011-11-10 19:13:49
【问题描述】:
将 varchar 转换为 float 时出错。
有一个表(不是我制作的),列有 result,有 varchar 数据。我想转换为浮点数以获取所有大于 180.0 的值。
SELECT result FROM table WHERE result > 180.0
产生错误。不过有趣的是:
WITH temp AS (
CASE
WHEN ISNUMERIC(result)=1 THEN CAST(result as FLOAT)
ELSE CAST(-1.0 AS FLOAT)
END AS result
)
这运行良好。当我与它配对时:
SELECT temp.result FROM temp WHERE temp.result > 180.0
我再次收到错误消息。想法?
更新:请求完整代码...
WITH temp AS (
SELECT
CASE
WHEN ISNUMERIC(result)=1 THEN CAST(result as FLOAT)
ELSE CAST(-1.0 AS FLOAT)
END AS result
FROM table)
SELECT temp.result FROM temp WHERE temp.result > 180.0
使用 SQL-SERVER 2008 RC2。
【问题讨论】:
-
你能给出你使用的确切语法吗?您的
WITH .. AS (CASE ... )不完整且不正确。 -
我试图重现错误但无法...我将以下内容放在您发布并从@t 中选择的代码之前并返回 199。声明@t 表(结果 varchar(500) ) 插入@t(结果)值('199.00')插入@t(结果)值('test');
-
@Jeremy:您需要一个通过
ISNUMERIC测试但无法转换的测试值,例如'1,0'。
标签: sql-server tsql