保罗狄克逊的答案为我工作出色。要添加到这一点,这里有一些事情,我对那些有兴趣使用REGEXP观察:
要使用通配符实现多LIKE过滤器:
SELECT * FROM fiberbox WHERE field LIKE '%1740 %'
OR field LIKE '%1938 %'
OR field LIKE '%1940 %';
使用REGEXP备选:内
SELECT * FROM fiberbox WHERE field REGEXP '1740 |1938 |1940 ';
值REGEXP引用和|之间的引号(OR)运营商被视为通配符。通常情况下,REGEXP需要通配符表达式,如(。*)1740(。*)为1740%%至工作。
如果您需要在通配符的位置更多的控制,使用其中的某些变种:
具有受控通配符布局完成这样:
SELECT * FROM fiberbox WHERE field LIKE '1740 %'
OR field LIKE '%1938 '
OR field LIKE '%1940 % test';
用途:
SELECT * FROM fiberbox WHERE field REGEXP '^1740 |1938 $|1940 (.*) test';
有更有效的方法来缩小特定的匹配,但这需要更多的正则表达式审查。注意:并非所有正则表达式模式似乎都可以在MySQL语句中使用。你需要测试你的模式,看看有什么作用。
最后,为了实现多似与不似过滤器:
SELECT * FROM fiberbox WHERE field LIKE '%1740 %'
OR field LIKE '%1938 %'
OR field NOT LIKE '%1940 %'
OR field NOT LIKE 'test %'
OR field = '9999';
使用REGEXP备选:
SELECT * FROM fiberbox WHERE field REGEXP '1740 |1938 |^9999$'
OR field NOT REGEXP '1940 |^test ';
或混合备选:
SELECT * FROM fiberbox WHERE field REGEXP '1740 |1938 '
OR field NOT REGEXP '1940 |^test '
OR field NOT LIKE 'test %'
OR field = '9999';
通知我分离未设置在一个单独的WHERE过滤器中。我尝试了使用否定模式,前瞻模式等等。但是,这些表达似乎并没有产生预期的结果。在上面的第一个例子中,我使用^ 9999 $来表示完全匹配。这允许您在同一表达式中添加与通配符匹配的特定匹配项。但是,您也可以混合使用这些类型的语句,如列举的第二个示例中所示。
关于性能,我对现有的表进行了一些小测试,结果发现我的变化没有区别。不过,我认为性能可能是更大的数据库,更大的领域,更大的记录数量和更复杂的过滤器的问题。
一如既往,使用上面的逻辑是有道理的。
如果你想了解更多关于正则表达式,我建议www.regular-expressions.info作为一个很好的参考网站。
'WHERE FIND_IN_SET(f.fiberbox, “1740,1938,1940” )` – 2017-10-30 20:21:27