在 where 子句中比较值时,在 sql 中将数据类型 varchar 转换为数字时出错
Error converting data type varchar to numeric in sql when value is compared in where clause
我有一个存储为 varchar 的十进制值数据集。
我需要 return 所有小于 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
当我 运行 这个查询时,我得到错误:
converting data type varchar to numeric
当我 运行 没有 where 子句的查询时,值的范围从 5.0 到 16.9。
另一列只是一个身份字段。
Value
字段在 CTE 查询中转换为数字。
为什么where子句会报错?
更新
总行数为 228。应该有 144 returned 但只有 39 returned。
这是查询优化器决定将查询作为单个查询执行的结果。它结合了您所有的 WHERE
条件,并选择在 ISNUMERIC
检查之前执行 Value < 8.0
检查。要解决这个问题,您需要先过滤所有数值并将其放入临时 table:
INSERT INTO #TempTable
SELECT *
FROM Observation
WHERE
Term = 'HBGAIC'
AND ISNUMERIC(Value) = 1;
SELECT *
FROM #TempTable
WHERE CAST(Value AS NUMERIC(3, 1)) < 8.0;
我有一个存储为 varchar 的十进制值数据集。 我需要 return 所有小于 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
当我 运行 这个查询时,我得到错误:
converting data type varchar to numeric
当我 运行 没有 where 子句的查询时,值的范围从 5.0 到 16.9。
另一列只是一个身份字段。
Value
字段在 CTE 查询中转换为数字。
为什么where子句会报错?
更新 总行数为 228。应该有 144 returned 但只有 39 returned。
这是查询优化器决定将查询作为单个查询执行的结果。它结合了您所有的 WHERE
条件,并选择在 ISNUMERIC
检查之前执行 Value < 8.0
检查。要解决这个问题,您需要先过滤所有数值并将其放入临时 table:
INSERT INTO #TempTable
SELECT *
FROM Observation
WHERE
Term = 'HBGAIC'
AND ISNUMERIC(Value) = 1;
SELECT *
FROM #TempTable
WHERE CAST(Value AS NUMERIC(3, 1)) < 8.0;