【发布时间】:2016-12-14 21:30:33
【问题描述】:
我有一个以 varchar 形式存储的十进制值数据集。 我需要返回所有小于 8.0 的值。 这是我的查询:
;WITH CTE
AS
(
SELECT PatientEncounterID, CAST(value as numeric(3,1)) As Value
from Observation
where Term = 'HGBA1C' AND isnumeric(value) = 1
)
SELECT *
FROM CTE
WHERE Value < 8.0
当我运行这个查询时,我得到了错误:
将数据类型 varchar 转换为数字
当我在没有 where 子句的情况下运行查询时,值的范围是 5.0 到 16.9。
另一列只是一个身份字段。
Value 字段在 CTE 查询中转换为数字。
为什么where子句会出错?
更新 总行数为 228。应该返回 144,但只返回 39。
【问题讨论】:
-
小心使用 ISNUMERIC 来隔离实际为数字的值。事物“1e8”、“¢”、“$。”将使用 isnumeric 全部评估为 1,但会在您的谓词中引发异常。对我来说,您遇到的最大问题是将您确定为十进制的内容存储在 varchar 列中。您显然有一些实际上不是小数的值。
标签: sql-server type-conversion numeric