我有一个存储为varchar的十进制值的数据集。 我需要返回所有小于8.0的值。 这是我的查询:将数据类型varchar转换为sql中的数值时出现错误当在条款中比较值时
;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
当我运行此查询我得到的错误:
converting data type varchar to numeric
当我运行的查询,而无需在where子句中值的范围从5.0到16.9。 另一列仅仅是一个标识字段。 将Value
字段转换为CTE查询中的数字。
为什么可以在where子句中出错?
UPDATE 总的行数是228.应该有144个返回,但只返回39个。
http://stackoverflow.com/q/41109677/6167855 – scsimon
小心使用ISNUMERIC隔离是值实际上数字。事物“1e8”,“¢”,“$”。将全部用isnumeric评估为1,但会用谓词抛出异常。对我来说,你最大的问题就是在varchar列中存储你确定的十进制数。你显然有一些实际上不是小数的值。 –