Sql 使用“替换”进行查询时出错

Sql 使用“替换”进行查询时出错,sql,oracle,Sql,Oracle,我在oracle服务器上有一个错误,但我不明白为什么它不工作。 我使用的是oracle sql developer软件 查询是: SELECT * FROM TestView WHERE REPLACE(TestView.Row2, '.', ',') > 0 ; TestVue.Row2中的值:'46.08'、'-46.47'、'1084.05'、'66500'、,。。。 TestView是一个视图,它检查返回一个没有空值的行 当我执行查询时,我总是出现一个错误,他说: ORA-017

我在oracle服务器上有一个错误,但我不明白为什么它不工作。 我使用的是oracle sql developer软件

查询是:

SELECT * FROM TestView WHERE REPLACE(TestView.Row2, '.', ',') > 0 ;
TestVue.Row2中的值:'46.08'、'-46.47'、'1084.05'、'66500'、,。。。 TestView是一个视图,它检查返回一个没有空值的行

当我执行查询时,我总是出现一个错误,他说:

ORA-01722:无效号码 172200000-无效号码 *原因: *行动:

谢谢你的帮助


Zoners

表中有一行无法解析为数字格式。很可能是一个空白列

SELECT * FROM TestVue WHERE TestVue.Row2 IS NULL ;

您应该能够找到具有以下内容的行:

select Row2
from TestVuw
where length(trim(translate(Row2, '+-.,0123456789', ' '))) = 0

当然,这允许多个+、-、和,。可以使用正则表达式对其进行进一步细化,但这通常可以找到不好的表达式。

使用NVL函数避免由null字段引起的错误,使用to_NUMBER函数在与零比较之前转换为数字

SELECT * FROM TestView WHERE TO_NUMBER(REPLACE(NVL(TestView.Row2,'0'), '.', ',')) > 0 ;

但是视图TestVue检查Row2是否为null。无论如何,我已经使用您的查询来检查行是否为空,并且我没有空列。我用你的问题编辑我的帖子,是的,但是空白和空是不同的。查看是否可以使用@Gordon Linoff'之类的查询找到坏行。这将不会返回任何结果。你不能将空值和相等值进行比较。好吧,但是你投票反对吗?因为这回答了问题。是的,您的链接显示为空,在oracle中是等效的。对我来说没有意义,但也不在这里或那里。更新使用为NULL:Just confirm=如果仅为VARCHAR2,则不会返回空行。愚蠢的甲骨文。为什么你认为这会比原来的更好?如果你只是建议他试试看是否有效,那不是答案。考虑到字段不是空的,这就解决了无效数字错误。如果没有,则可能还需要使用NVL函数:从TestView中选择*到_numberReplaceNVLRow2、'0'、'.'、'.'、'>0I使用您的查询时出现此错误:ORA-00920:无效的关系运算符00920。00000-无效的关系运算符*原因:*操作:第1行第列出错:110@Zoners . . . 这个问题已经解决了。在所有这些字符串操作之后需要进行比较;我没有错误,但是查询没有返回结果。如果第2行中的值为46.07,并且我使用>0而不是=0尝试您的查询,则没有结果。谢谢你的帮助help@Zoners . . . 嗯,也许你有两个小数点。您可以查找类似“%.%”的值。