MySQL 通配符与 concat 匹配

标签 mysql sql-like concatenation

我有这段代码可以返回我想要的结果:

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/

相关文章:

从 token 和宏的串联创建类似对象的宏

java - 从mysql数据库的单列中检索有限的行

mysql - 检查列是否以非整数开头

sql - 如何获取oracle sql中指定位置具有特定字符的记录

R data.table %like% 与逻辑 AND

arrays - Bash 连接数组条目,中间没有空格

unix - 如何连接大量文件

MySql 不是空复合字段

php - pdo mysql 连接不工作

Mysql查询order by,longtext值为int