ORA-01722:无效数字-所有内容似乎都是数字



我有以下查询:

WITH aux AS (
SELECT
col1,
col2,
col3
FROM
table1
WHERE
condition1
)
SELECT
col1,
SUM(
CASE
WHEN nvl(col3, 9) != '8' THEN
col2
END
) h,
SUM(col2) h1
FROM
aux
GROUP BY
col1;

然而,当我执行它时,会出现以下错误:

ORA-01722: invalid number
ORA-02063: preceding line from RBIP
01722. 00000 -  "invalid number"
*Cause:    The specified number was invalid.
*Action:   Specify a valid number

但是,当我试图找到col2中导致问题的条目时,我没有得到任何结果:

WITH aux AS (
SELECT
col2
FROM
table1
WHERE
condition
)
SELECT
*
FROM
aux
WHERE
NOT REGEXP_LIKE ( col2,
'[[:digit:]]' );

阿比关于如何继续寻找col2罪犯的暗示将不胜感激。

此表达式不会找到混合数字和非数字:

WHERE NOT REGEXP_LIKE ( col2, '[[:digit:]]' );

这就是'AAA1AAA'将匹配,因为它有一个数字。

试着检查所有东西都是一个数字:

WHERE NOT REGEXP_LIKE ( col2, '^[[:digit:]]*$' );

或者没有非数字:

WHERE REGEXP_LIKE ( col2, '[^[:digit:]]' );

你能使用这个命令吗https://docs.oracle.com/database/121/SQPUG/ch_twelve019.htm#SQPUG040并发布其结果。

显然,这是一个类型转换的问题,但可以肯定的是,需要表定义。

最新更新