测试表和测试数据
方法1:使用like
LIKE通常与通配符%一起使用,%表示通配pattern中出现的内容,而不加通配符%的LIKE语法,表示精确匹配,其实际效果等同于 = 等于运算符
SELECT * FROM 表名 WHERE 字段名 like "%字符%";
示例:
SELECT * FROM ys_dongtai t WHERE t.content LIKE '%#%';
方法2,使用LOCATE(substr,str) 和POSITION(substr IN str)
返回子串 substr 在字符串 str 中第一次出现的位置。如果子串 substr 在 str 中不存在,返回值为 0:
select * from 表名 where locate(字符,字段)
select * from 表名 where position(字符 in 字段);
示例:
SELECT *,locate('#',t.content) FROM ys_dongtai t WHERE locate('#',t.content)
SELECT *,position('#' in t.content) FROM ys_dongtai t WHERE position('#' in t.content)
方法3:FIND_IN_SET(str,strlist)
语法:FIND_IN_SET(str,strlist)
定义:
1. 假如字符串str在由N子链组成的字符串列表strlist中,则返回值的范围在1到N之间。
2. 一个字符串列表就是一个由一些被‘,’符号分开的自链组成的字符串。
3. 如果第一个参数是一个常数字符串,而第二个是typeSET列,则FIND_IN_SET()函数被优化,使用比特计算。
4. 如果str不在strlist或strlist为空字符串,则返回值为0。
5. 如任意一个参数为NULL,则返回值为NULL。这个函数在第一个参数包含一个逗号(‘,’)时将无法正常运行。
strlist:一个由英文逗号“,”链接的字符串,例如:"a,b,c,d",该字符串形式上类似于SET类型的值被逗号给链接起来。
示例:
SELECT *,FIND_IN_SET('攀登者',t.content) FROM ys_dongtai t WHERE FIND_IN_SET('攀登者',t.content)
find_in_set()和like的区别:
主要的区别就是like是广泛的模糊查询,而 find_in_set() 是精确匹配,并且字段值之间用‘,'分开。
示例:
SELECT * FROM ys_dongtai t WHERE '攀登者' IN(t.content)
查不到结果,因为find_in_set 搜索要匹配的内容为变量,in搜索要匹配的内容为常量,只有查询内容和字段内容一致时才可以查到
示例
SELECT * FROM ys_dongtai t WHERE '我和我的祖国#攀登者#红海行动#战狼2' IN(t.content)
方法4: INSTR(str,dlim)
可代替传统的like方式查询,并且速度更快。
instr 函数,第一个参数是字段,第二个参数是要查询的串,返回串的位置,第一个是1,如果没找到就是0.
示例
SELECT *,instr(t.content,'#') FROM ys_dongtai t WHERE instr(t.content,'#')