【发布时间】:2014-01-21 15:40:32
【问题描述】:
为什么
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),而带有数字列的类似版本 im 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 是 number 类型,alphanumeric_column 是 nvarchar_2 类型。请注意,上面的示例在没有数值比较的情况下也能正常工作 (n.VAL >= 100)。
有人知道吗?
【问题讨论】:
-
好吧,那么你有一个不是数字的 alphanumeric_column 值。如果您显示表架构和示例数据会有所帮助。
-
No: (select to_number(trim(alphanumeric_column)) as nr from my_table where NOT regexp_like (trim(alphanumeric_column),'[^[:digit:]]') 只留下数值