0

原始查询:

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() 函数,但无法在无法分配的情况下创建应有的错误抛出。

4

1 回答 1

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$';

在此处查看演示

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

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

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

无论如何,在您的应用程序上尝试一下可能是值得的:您使用的是 chars 还是 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$';

演示在这里

于 2018-08-24T11:45:43.877 回答