SQL Oracle在较大的字符串中查找子字符串

时间:2016-01-06 12:21:25

标签: sql oracle

我得到了这个小sql语句:

select 
NVL(table2.usermail, 'some other mail') user_mail
from 
table1, table2 
where table1.user = table2.usernr

这很好用,但结果不是我需要的。

示例:

table1.user给了我" KNL \ MarkZuckerbeg" table2.usernr给了我" MarkZuckerbeg"

table1.user = table2.usernr现在是我不回复数据的原因。

任何想法如何解决这个问题?

我尝试使用INSTR但没有结果。

2 个答案:

答案 0 :(得分:1)

您可以改为使用like

select coalesce(t2.usermail, 'some other mail') as user_mail
from table1 t1 join
     table2 t2
     on t1.user like '%' || t2.usernr || '%';

请注意其他更改:

  • 显式JOIN语法。简单规则:从不FROM子句中使用逗号。
  • 表别名,使查询更易于编写和阅读。
  • COALESCE()代替NVL()COALESCE()是ANSI标准函数,更灵活(可能需要两个以上的参数)。

答案 1 :(得分:1)

如果您愿意,可以使用INSTR

SELECT NVL(TABLE2.USERMAIL, 'some other mail') USER_MAIL
  FROM TABLE2
  INNER JOIN TABLE1
    ON INSTR(TABLE1.USER, TABLE2.USERNR) > 0 OR
       INSTR(TABLE2.USERNR, TABLE1.USER) > 0

祝你好运。