我有一个简单的视图,该视图接受一个varchar并将其转换为浮点数。
Select CAST(TRIM(Measurement) AS float) as Measurement
from MyTable
where Type = 'Some Value'
现在,该视图将列视为浮点型,但是当我尝试使用Measure = 10的where查询查询视图时,出现错误:
Error converting data type varchar to float.
我知道字符串值将始终是一个数字(我已经检查了很多次)。在产品中弹出此错误之前,我还通过多轮测试获得了此结果。我的猜测是表中还有其他一些测量结果,这些测量结果不是我的结果,而是导致此错误的原因(这些测量值在测试期间可能不存在)。
有没有一种方法可以清理查询,以便始终将结果视为浮点数?
谢谢
答案 0 :(得分:1)
您显然在该列中有错误的值。您可以使用正则表达式(在大多数数据库中)或SQL Server中的try_
函数找到它们。
例如:
Select Measurement
from MyTable
where Type = 'Some Value' AND try_convert(float, measurement) is null;
或者:
where type = 'Some Value' and
not measurement ~ '^-?[0-9]*[.]?[0-9]+$'
Th ~
是用于正则表达式匹配的Postgres。其他数据库具有相似的功能,但语法不同。