我有一个 varchar 字段,在应用过滤器时应该始终包含一个数字(十进制)值。但是当我像这样运行 sql 时出现“将数据类型 varchar 转换为数字时出错”:
SELECT CAST(A.text AS numeric(38,16))
FROM Answers A
INNER JOIN Questions Q ON Q.ID = A.QuestionID
WHERE Q.Text = 'Rating'
AND isnumeric(A.text) = 1
只有一个值通过了非数字测试但未通过强制转换:
DECLARE @text varchar(100)
SET @text = '2.83417869359255E-02'
SELECT CASE WHEN ISNUMERIC(@text) = 1 THEN CAST(@text AS NUMERIC(38,16)) ELSE NULL END
我应该如何确保处理这样的值?在一天结束时,我想计算所有小于 5 的值,所以像“2.83417869359255E-02”这样的数字可以四舍五入为零。我还运行了一个查询来检查表中的值以及 varchar 的长度以及这些结果:
MaxValue MinValue LenVarChar
-------------------- -------------------- -----------
0 0 1
10 10 2
2.2 9.2 3
3.55 6.32 4
5.453125 5.453125 8
2.79989361763 9.47216796875 13
2.089115858078 9.132080078125 14
1.1529632806778 9.8538990020752 15
0.64174896478653 9.83681106567383 16
0.111961431801319 0.991760730743408 17
2.83417869359255E-02 2.83417869359255E-02 20