首页 > 解决方案 > 在 queryExecute() 中使用 REGXP_LIKE

问题描述

我正在寻找修改现有查询以使用 REGEXP_LIKE 但与我无法正确理解的某些语法相冲突。我们目前使用以下方法对 Oracle DB 进行 CF 查询:

result = QueryExecute("
  SELECT paramOne, paramTwo FROM someTable WHERE fieldOne = :PUBLISHER
", {PUBLISHER=publisherId}, {datasource="someDB"});

哪个有效。但是,我想将基础查询修改为:

result = QueryExecute("
  SELECT paramOne, paramTwo FROM someTable WHERE REGEXP_LIKE(fieldOne, '(^|,)(:PUBLISHER)($|,)', 'i')
", {PUBLISHER=publisherId}, {datasource="someDB"});

但它没有达到预期的效果。当我尝试调试时,我注意到了一些事情......

我觉得有些东西我不理解将变量传递到 REGEX 表达式中queryExecute(),所以如果有任何想法,我将不胜感激。

感谢您收到任何意见,菲尔

标签: sqloraclecoldfusion

解决方案


SQL> 
with t (fieldOne) as  (
  select 'abc, def' from dual union all
  select 'def cba' from dual union all
  select ':publisher' from dual
)
select * from t where REGEXP_LIKE(fieldOne, '(^|,)(:PUBLISHER)($|,)', 'i');

FIELDONE  
----------
:publisher

SQL> 
with t (fieldOne) as  (
  select 'abc, def' from dual union all
  select 'def cba' from dual union all
  select ':publisher' from dual
)
select * from t where REGEXP_LIKE(fieldOne, '(^|,)(' || :PUBLISHER || ')($|,)', 'i');

FIELDONE  
----------
abc, def

推荐阅读