为什么甲骨文“从双重选择级别”与TO_NUMBER结果不正常工作
select *
from (
SELECT LEVEL as VAL
FROM DUAL
CONNECT BY LEVEL <= 1000
ORDER BY LEVEL
) n
left outer join (select to_number(trim(alphanumeric_column)) as nr from my_table
where NOT regexp_like (trim(alphanumeric_column),'[^[:digit:]]')) d
on n.VAL = d.nr
where d.nr is null
and n.VAL >= 100
抛出ORA-01722无效的数字(原因是最后一排,n.VAL),而类似的版本与数字列即时MY_TABLE正常工作:
select *
from (
SELECT LEVEL as VAL
FROM DUAL
CONNECT BY LEVEL <= 1000
ORDER BY LEVEL
) n
left outer join (select numeric_column as nr from my_table) d
on n.VAL = d.nr
where d.nr is null
and n.VAL >= 100
因为numeric_column的类型是数量和类型nvarchar_2的alphanumeric_column。请注意,上面的例子没有数字比较(n.VAL> = 100)正常工作。
有人知道吗?
那么,你有alphanumeric_column的值不是一个数字。如果您显示表架构和示例数据,这将有所帮助。 – OldProgrammer
否:(从trim_(trim)(alphanumeric_column))中选择nr from my_table 其中not regexp_like(trim(alphanumeric_column),'[^ [:digit:]]')只留下数字值 – Ferenjito
这很奇怪 – OldProgrammer