mysql 查询 包含字符串 最常用的3种方法

假设我们有一张表:

  1. CREATE TABLE users(id int(6) NOT NULL AUTO_INCREMENT,PRIMARY KEY (id),user_name VARCHAR(20) NOT NULL,emails VARCHAR(50) NOT NULL);

 

初始化表,并插入一些数据。

  1. truncate table users;
  2. INSERT INTO users(user_name, emails) VALUES('小张','a@email.com,b@email.com,c@email.com');
  3. INSERT INTO users(user_name, emails) VALUES('小王','aa@email.com,bb@email.com,cc@email.com');

 

mysql 查询 包含字符串

 

思考:Mysql 中有些字段是字符串类型的,如何查找其中包含某些字符串的记录呢?

 

方法一:

利用mysql like;

  1. SELECT * FROM users WHERE emails like "%b@email.com%";

 

这样bb@email.com的用户也查出来了,有些场景下可能这样是不符合预期的。

 

方法二:

利用mysql 字符串函数 find_in_set();

  1. SELECT * FROM users WHERE find_in_set('aa@email.com', emails);

 

这样是可以的,怎么理解呢?

mysql有很多字符串函数 find_in_set(str1,str2)函数是返回str2中str1所在的位置索引,str2必须以","分割开。

 

拓展案例:

  1. mysql > SELECT find_in_set('b','a,a,b,c,d') as test;
  2. -> 3

 

方法三:

使用mysql字符串函数 locate(substr,str),如果包含,返回>0的数,否则返回0

  1. select * from users where locate('aa@email.com',emails);

 

拓展案例:

判断site表中的url是否包含'http://'子串,如果不包含则拼接在url字符串开头

  1. update site set url =concat('http://',url)  where locate('http://',url)=0;

 

注意:mysql中字符串的拼接不能使用加号+,用concat函数;

付杰
  • ¥ 189.0元
  • 市场价:269.0元
  • ¥ 388.0元
  • 市场价:388.0元
  • ¥ 198.0元
  • 市场价:298.0元
  • ¥ 159.0元
  • 市场价:499.0元

发表评论

:?: :razz: :sad: :evil: :!: :smile: :oops: :grin: :eek: :shock: :???: :cool: :lol: :mad: :twisted: :roll: :wink: :idea: :arrow: :neutral: :cry: :mrgreen: