我正在将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中运行?
答案 0 :(得分:0)
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