当我想比较这两列时,它向我显示了这个menssage,没有“where子句”,没有任何错误,但是当我写“where”时,错误就出现了
这是我的sql句子:
select MONEY
, to_char(MONEY, 'FM999G999G999G999D99', 'NLS_NUMERIC_CHARACTERS='',.''')
from ACOUNT
where MONEY is not null
月经错误:ORA-01722:无效号码01722。00000 - “无效号码” *原因:指定的号码无效。*操作: 指定一个有效的数字。
它可能不仅是非数字字符,而且只是一个逗号分隔的“数字”字符串值
此示例导致相同的错误
select to_char('2,5', 'FM999G999G999G999D99', 'NLS_NUMERIC_CHARACTERS='',.''') from dual;
因此,这里是在ACOUNT表中查找问题记录的查询。
select * from ACOUNT where not regexp_like(replace(MONEY, '.', ''),'^[0-9]+$');
-- replace() is here to make regexp_like to ignore values like '2.5' which can be converted to a number
您的表ACOUNT
中的MONEY
列中的数据不是数字。
这是一个演示:
演示
我假设当没有where子句时它之所以有效,是因为您的工具只向您显示前50个结果......当您添加 where 子句并筛选数据时,在前 50 个结果中,有一个数据不是数字。
您可以在您的工具中进行更改,方法是转到:工具
您可以创建此函数:
CREATE OR REPLACE FUNCTION is_number (p_str IN VARCHAR2)
RETURN NUMBER
IS
l_num NUMBER;
BEGIN
l_num := to_number(p_str);
RETURN l_num;
EXCEPTION
WHEN others THEN
RETURN NULL;
END is_number;
/
我在这里发现:Oracle VARCHAR列上的数值比较是如何工作的?
然后使用它,您可以使用以下代码:
select *
from (select MONEY_c
, to_char(is_number(MONEY_c), 'FM999G999G999G999D99', 'NLS_NUMERIC_CHARACTERS='',.''') as money_2
from ACOUNT)
where money_2 is not null
我正在我的Oracle客户机中运行下面提到的查询,我得到了 ORA-01722:无效号码 错误。我知道这个问题是由于TAG_VALUE列的类型是“”,我正在将其转换为数字,然后在where子句中使用该字段。我尝试过使用“”功能,但这也没有帮助。如果我运行查询时忽略了最后一个 where 条件,代码为
对于某人来说,这是一个非常简单的方法,下面的插入内容给了我 ORA-01722:无效的数字 为什么?
我不明白为什么我会犯这个错误。 当我对交互式报表执行此查询时,它会引发 ORA-01722 错误。此查询不仅在 SQL 开发人员中正确运行,而且作为经典报表正确运行。当我将类型更改为交互式报表时,再次抛出相同的错误。 我该怎么办? 提前多谢。
我在包裹抛出错误中有一个查询 ORA-01722:无效号码。 我试了很多方法,但都没有成功。 null 请给我建议解决办法
我有两个表,模式如下: 表1 table1_id(pk)(整数) 姓名 表2 table2_id(pk)(字符串) table1_id(pk)(整数) 姓名 我的代码看起来像这样 现在当我查询:: 我得到以下错误: 似乎出现了一些不匹配。它似乎使用字符串“表2_id”来查询表1,而它应该使用“表1_id” 好心帮忙!
我正在创建一个对账报告,我主要是想知道每个发送批次的单据价值。 批处理 ID 位于其自己的列中,发送的数据位于一列中,并以逗号分隔,请参阅下面随机生成的示例: 每个批次至少有2行,最大可以是2000行。在此表中,我有两列:Batch ID和Data 我需要将所有文件金额相加,在这种情况下为100 200。 目前,我正在尝试通过此查询完成工作: 但是以错误ORA-01722结束:无效数字 提前感谢,