首页 > 解决方案 > oracle通过添加regexp_like将字符串连接到数字不起作用

问题描述

oracle 通过添加 regexp_like 将字符串连接到数字不起作用。例如,

Foo                           Bar
--------------                ------------
id varchar2(20)               id number(20,0)

foo id 可以是数字或任何字符串(不是数字),例如 123、hello、world、555 等。

select foo.id,bar.id from Foo foo 
left join Bar bar on (regexp_like(foo.id, '^[0-9]+$') and foo.id=bar.id)

错误:

ERROR at line 1:
ORA-01722: invalid number

foo.id=bar.id 仅在 foo.id 是数字时才被评估,对吗?

以下对mysql工作正常

select foo.id,bar.id from Foo foo 
left join Bar bar on (foo.id=bar.id)

但它会导致 ORA-01722: invalid number for oracle。这就是在连接条件中添加“regexp_like”的原因。

标签: sqloraclejoin

解决方案


像这样的东西:

select foo.id
       , bar.id 
from Foo foo 
left join Bar bar on foo.id = to_char(bar.id);

这是演示


推荐阅读