Symfony-addHaving-concat +正则表达式

时间:2018-08-23 12:09:31

标签: regex doctrine-orm concat query-builder doctrine-dbal

原始查询:

Meteor

Querybuilder

select firstfield, secondfield, phone_number, thirdfield 
from table 
having CONCAT(firstfield, ' ', secondfield, ' ', thirdfield, ' ', fourthfield) regexp 'value' 
   and CONCAT(firstfield, ' ', secondfield, ' ', thirdfield, ' ', fourthfield) regexp 'value2' 
   and CONCAT(firstfield, ' ', secondfield, ' ', thirdfield, ' ', fourthfield) regexp 'value3'
   and CONCAT(firstfield, ' ', secondfield, ' ', thirdfield, ' ', fourthfield) regexp 'value4'

问题:

如何用正则表达式收集concat而不是函数?已尝试使用literal()函数,但无法创建无法分配的适当错误引发。

1 个答案:

答案 0 :(得分:0)

对于以下两种形式中的任何一种,该查询似乎都适用于MySQL:

select *
from test
having concat(field1, field2) regexp '^[FB].*' and
       concat(field1, field2) regexp 'o$';

select *
from test
where concat(field1, field2) regexp '^[FB].*' and
      concat(field1, field2) regexp 'o$';

参见演示 here

我只是在考虑问题所在,可能是CHAR列

例如,一列将在FOO<space><space>上有CHAR(5),而不是FOO上的VARCHAR(5)。因此,在连接时,您将拥有类似于FOO<space><space>BAR<space><space>的东西,因此正则表达式将失败。

但是,使用SQLFiddle似乎并非如此。它似乎没有添加空格。参见 here

无论如何,可能值得在您的应用程序上尝试:您使用的是char还是varchars?您可以尝试在列中添加trims吗?

select *,concat(trim(field1), trim(field2))
from test
having concat(trim(field1), trim(field2)) regexp '^[FB].*' and
       concat(trim(field1), trim(field2)) regexp 'o$';


select *,concat(trim(field1), trim(field2))
from test
where concat(trim(field1), trim(field2)) regexp '^[FB].*' and
      concat(trim(field1), trim(field2)) regexp 'o$';

演示 here