Oracle regexp_instr

时间:2013-04-18 09:29:37

标签: regex oracle

可以用正则表达式帮助我吗?

我想检查在给定字符串中是否存在','。

literal:First_Name +; Last_Name + John,Smith

这里我想检查Last_Name是否包含','

select case when regexp_instr('First_Name+;Last_Name+John, Smith;Home_Adress+Michigan',
                                       '^(.*?\;|\+)*Last_Name\+(.*\,).*$', ',') > 1

 then 'ok' else 'nok' end as test1 from dual;

2 个答案:

答案 0 :(得分:0)

regexp_instr()的第三个参数是一个可选的起始位置 - 只是省略它。

此外,由于你的正则表达式匹配整个字符串,检查regexp_instr()>是没有意义的。 1 - 如果你得到一个匹配,regexp_instr()将返回1,否则返回0。

with v_data as (
  select 'First_Name+;Last_Name+John, Smith;Home_Adress+Michigan' as name from dual 
  union all
  select 'First_Name+John;Last_Name+Smith;Home_Adress+Michigan' as name from dual 
)
select 
  name, 
  regexp_instr(name, '^(.*?\;|\+)*Last_Name\+(.*\,).*$') 
from v_data

答案 1 :(得分:0)

为什么在这里使用regexp?

case when 
    regexp_like(
      'First_Name+;Last_Name+John, Smith;Home_Adress+Michigan', 
      '(^|;)Last_Name\+[^;]*,'
    )
  then 'present' 
  else 'not present' 
end