一般情况
一般情况下我们用模糊查询的话都是用下面的形式吧
select * from user where status = 1 and (phone like '%15%' or name like '%15%' or email like '%15%');
这样的话会写很多 xx like ‘%xx%’ 这样的东西,那么怎么简化这些这些了
那我们需要了解 mysql 中的 concat() 和 concat_ws() 了
concat()
mysql> select concat('1','2','3') from test ;+---------------------+| concat('1','2','3') |+---------------------+| 123 |+---------------------+
如果连接串中存在NULL,则返回结果为NULL:
mysql> select concat('1','2',NULL,'3') from test ;+--------------------------+| concat('1','2',NULL,'3') |+--------------------------+| NULL |+--------------------------+
concat_ws()
concat_ws(separator,str1,str2,…) 代表 concat with separator ,是concat()的特殊形式。第一个参数是其它参数的分隔符。分隔符的位置放在要连接的两个字符串之间。分隔符可以是一个字符串,也可以是其它参数。
mysql> select concat_ws(':','1','2','3') from test ;+----------------------------+| concat_ws(':','1','2','3') |+----------------------------+| 1:2:3 |+----------------------------+
分隔符为NULL,则返回结果为NULL:
mysql> select concat_ws(NULL,'1','2','3') from test;+-----------------------------+| concat_ws(NULL,'1','2','3') |+-----------------------------+| NULL |+-----------------------------+
如果参数中存在NULL,则会被忽略:
mysql> select concat_ws(':','1','2',NULL,NULL,NULL,'3') from test ;+-------------------------------------------+| concat_ws(':','1','2',NULL,NULL,NULL,'3') |+-------------------------------------------+| 1:2:3 |+-------------------------------------------+
可以对NULL进行判断,并用其它值进行替换:
mysql> select concat_ws(':','1','2',ifNULL(NULL,'0'),'3') from bank limit 1;+---------------------------------------------+| concat_ws(':','1','2',ifNULL(NULL,'0'),'3') |+---------------------------------------------+| 1:2:0:3 |+---------------------------------------------+
偷懒的模糊查询
经过上面的了解
想必大家应该知道怎么做了吧
没错,用 concat_ws() 我们可以把字段拼接起来然后用 like
就像这样
select * from user where status = 1 and concat_ws('_',phone,name,email) like '%15%';
哈哈,是不是简单多了呢
