我有这段代码可以返回我想要的结果:
SELECT CONCAT('#', id, ' ', firstname, ' ', lastname, ' (', company, ')') AS result FROM client_detail
结果如下:
#1 James Hadley (OpenBill)
#2 Lucinda Hadley (Make a Squish)
但是当使用 LIKE 尝试搜索相同的字符串时(我想在上述结果中的任何位置搜索可变字符串),我没有得到任何输出也没有错误:
SELECT CONCAT('#', id, ' ', firstname, ' ', lastname, ' (', company, ')') AS result FROM client_detail WHERE CONCAT('#', id, ' ', firstname, ' ', lastname, ' (', company, ')') LIKE '%jam%' ORDER BY id ASC
我使用 LIKE 操作数是对的,还是有更好/正确的搜索结果的方法?
最佳答案
MySQL 的CONCAT
语句将使用系统默认的排序规则。如果您的表定义为 UTF-8 但您的系统是 latin1 那么您的 LIKE
语句可能会选择区分大小写的排序规则。
使用 LOWER
强制进行不区分大小写的匹配
(使用 HAVING
来利用您的别名 result
):
SELECT CONCAT('#',id,' ',firstname,' ',lastname,' (', company, ')') AS result
FROM client_detail
HAVING LOWER(result) LIKE '%jam%'
ORDER BY id ASC
或使用 COLLATION(将取决于您的系统)
...
HAVING result LIKE '%jam%' COLLATE latin1_general_ci
...
关于MySQL 通配符与 concat 匹配,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12864126/