欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

一天一篇mysql之十六:mysql中的like

程序员文章站 2022-03-06 17:50:39
...

MySQL LIKE 语法
LIKE 运算符用于 WHERE 表达式中,以搜索匹配字段中的指定内容,语法如下:

SELECT field1, field2,...fieldN 
FROM table_name
WHERE field1 LIKE condition1 [AND [OR]] filed2 = 'somevalue'

在 LIKE 前面加上 NOT 运算符时,表示与 LIKE 相反的意思,即选择 column 不包含 pattern 的数据记录。
LIKE 通常与通配符 % 一起使用,% 表示通配 pattern 中未出现的内容。而不加通配符 % 的 LIKE 语法,表示精确匹配,其实际效果等同于 = 等于运算符。

栗子,首先建一个表


SET FOREIGN_KEY_CHECKS=0;

-- ----------------------------
-- Table structure for actor
-- ----------------------------
DROP TABLE IF EXISTS `actor`;
CREATE TABLE `actor` (
  `actor_id` smallint(5) unsigned NOT NULL AUTO_INCREMENT,
  `first_name` varchar(45) NOT NULL,
  `last_name` varchar(45) NOT NULL,
  `last_update` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP,
  PRIMARY KEY (`actor_id`),
  KEY `idx_actor_last_name` (`last_name`)
) ENGINE=InnoDB AUTO_INCREMENT=201 DEFAULT CHARSET=utf8;

随便插几条数据

INSERT INTO `sakila`.`actor` (`actor_id`, `first_name`, `last_name`, `last_update`) VALUES ('1', 'PENELOpE', 'GUINESS', '2018-09-17 21:51:06');
INSERT INTO `sakila`.`actor` (`actor_id`, `first_name`, `last_name`, `last_update`) VALUES ('54', 'PENELOPE', 'PINKETT', '2006-02-15 04:34:33');
INSERT INTO `sakila`.`actor` (`actor_id`, `first_name`, `last_name`, `last_update`) VALUES ('104', 'PENELOpE', 'CRONYN', '2018-09-17 21:51:14');
INSERT INTO `sakila`.`actor` (`actor_id`, `first_name`, `last_name`, `last_update`) VALUES ('120', 'PENELOPE', 'MONROE', '2006-02-15 04:34:33');

下面执行以下sql

SELECT * FROM actor a WHERE a.first_name LIKE "%P%p%";

得到结果

一天一篇mysql之十六:mysql中的like

由图可以分析出这个模糊查询成功,并且发现到并不区分大小写,如果区分大小写?

先把字段中的一些值改为小写,然后在like后面拼接上binary

一天一篇mysql之十六:mysql中的like

 

Sql的like语句中的通配符:百分号、下划线和escape

 

%:表示任意个或多个字符。可匹配任意类型和长度的字符。

Sql代码

select * from user where username like '%huxiao';   

  

select * from user where username like 'huxiao%';   

  

select * from user where username like '%huxiao%';   

另外,如果需要找出u_name中既有“三”又有“猫”的记录,请使用and条件

SELECT * FROM [user] WHERE u_name LIKE ‘%三%’ AND u_name LIKE ‘%猫%’

若使用 SELECT * FROM [user] WHERE u_name LIKE ‘%三%猫%’

虽然能搜索出“三脚猫”,但不能搜索出符合条件的“张猫三”。

 

_:表示任意单个字符。匹配单个任意字符,它常用来限制表达式的字符长度语句:(可以代表一个中文字符)
 

Sql代码  

select * from user where username like '_';   

  

select * from user where username like 'huxia_';   

  

select * from user where username like 'h_xiao';   

 

 如果我就真的要查%或者_,怎么办呢?使用escape,转义字符后面的%或_就不作为通配符了,注意前面没有转义字符的%和_仍然起通配符作用

Sql代码  

select username from gg_user where username like '%xiao/_%' escape '/';   

  

相关标签: mysql