Doctrine和Oracle REGEXP_LIKE

时间:2015-08-17 14:09:07

标签: regex oracle doctrine-orm

我正在将Doctrine与Oracle数据库结合使用。我大量使用特定于平台的功能,所以我已经创建了一堆自定义DQL函数。但现在我遇到了一个严重的问题。要使用正则表达式执行LIKE查询,Oracle提供REGEXP_LIKE运算符。它看起来像一个函数,但实际上充当关系运算符。不幸的是,Doctrine只允许我创建自定义函数,而不是运算符。我不能像函数一样使用它,因为Doctrine要求我把它作为一个完整的表达,例如REGEXP_LIKE(foo, bar) != 0。但是对于Oracle来说这是一个语法错误。

作为一种解决方法,我在自定义DQL函数的getSql方法中使用此装置:

CASE REGEXP_LIKE(foo, bar) THEN 1 ELSE 0 END
但是,看起来很丑陋。有没有更好的方法让它在Doctrine中运行?

1 个答案:

答案 0 :(得分:0)

Oracle中的

regexp_like仅允许在SQL语句的条件部分中使用;但你可以使用的是case子句中真正的Oracle函数regexp_count

select col1, col2, -- etc
case (regexp_count(col3, '^Hey$'))
   when 0 then 0
   else 1
end as found
from table;

因此,对于您的示例,REGEXP_LIKE(foo, bar) != 0将成为REGEXP_COUNT(foo, bar) != 0