Sql ORA-01722:oracle中的数字无效

Sql ORA-01722:oracle中的数字无效,sql,oracle,oracle11g,Sql,Oracle,Oracle11g,我有一个名为table_TEMP的表,列AMOUNT为varchar2(20) 我正在执行以下查询: SELECT to_number(AMOUNT) amt FROM TABLE_TEMP WHERE DC IN ('C','D'); 上述查询的结果为 AMT ---- 0 123 511 485 0 我想获取AMT>o的记录,并使用下面的查询 SELECT AMOUNT amt FROM TABLE_TEMP WHERE DC IN ('C','D') and to_number(A

我有一个名为table_TEMP的表,列AMOUNT为varchar2(20) 我正在执行以下查询:

SELECT to_number(AMOUNT) amt FROM TABLE_TEMP WHERE  DC IN ('C','D');
上述查询的结果为

AMT
----
0
123
511
485
0
我想获取AMT>o的记录,并使用下面的查询

SELECT AMOUNT amt FROM TABLE_TEMP WHERE  DC IN ('C','D') and to_number(AMOUNT) > 0;
获取错误ORA-01722:无效号码
请建议我..

如果您确定表中DC位于“C”和“D”中的所有行都是数字,那么您可以尝试:

WITH temp_res 
  AS (SELECT amount
        FROM table_temp
       WHERE DC IN ('C','D'))
SELECT amount amt 
  FROM temp_res 
 WHERE TO_NUMBER(amount) > 0;

您使用的是
o
还是
0
?您的帖子中有这两个字符…在检查o/0问题后,如果错误仍然存在,您可能希望使用以下查询来检查“金额”列是否包含任何非数字字符:从regexp类似的表中选择金额(金额“[^[:digit:][]”)。只是好奇,为什么amount被声明为varchar2而不是某个数字类型?我只使用零(0)。我首先选择要将金额转换为\u数字并显示数据的语句。它工作得很好。如果我在WHERE子句中使用相同的逻辑,为什么它会给我无效的数字错误。表中的其他行在
amount
列中有非数字数据。数据库可以按照它认为最有效的顺序自由地评估谓词。因此,在
dc
谓词之前计算
to_number
谓词是完全合法的。