Symfony - addHaving - concat + regexp



原始查询:

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'

查询生成器

$qb->select(
'firstfield',
'secondfield',
'thirdfield',
'fourthfield',
)->from(Table, 'u');

$queryHaving = "CONCAT(firstfield, ' ', secondfield, ' ', thirdfield, ' ', fourthfield) regexp 'value'";
$qb->andhaving($queryHaving);
$queryHaving = "CONCAT(firstfield, ' ', secondfield, ' ', thirdfield, ' ', fourthfield) regexp 'value2'";
$qb->andhaving($queryHaving);

问题:

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

该查询似乎适用于以下 2 种形式中的任何一种的 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$';

在此处观看演示

我只是在考虑问题可能出在 CHAR 列上

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

但是,对于SQLFiddle,情况似乎并非如此。它似乎没有添加空格。看这里

无论如何,可能值得在您的应用程序上尝试:您使用的是字符还是 varchar?您能否尝试在列中添加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$';

在这里演示。

相关内容

  • 没有找到相关文章

最新更新