SQL中如何使用LIKE_SQL模糊查询LIKE的用法

LIKE运算符通过%和_实现模糊查询。
%:匹配任意数量的字符。
示例:LIKE'Apple%' 匹配 Apple 的开头。
_:匹配单个字符。
示例:LIKE'S_msung%' 匹配以 S 开头的任何字符和另一个字符。

匹配开始:SELECTproduct_nameFROMproductsWHEREproduct_nameLIKE'Apple%'; 最后匹配: SELECTproduct_nameFROMproductsWHEREproduct_nameLIKE'%Phone'; 匹配包含: SELECTproduct_nameFROMproductsWHEREproduct_nameLIKE'%Pro%';
ESCAPE 处理特殊字符。
示例:LIKE'%2 0_2 02 3 %'ESCAPE'';匹配下划线_。

多种投注组合: AND: SELECTproduct_nameFROMproductsWHEREproduct_nameLIKE'%INTELLIGENCE%'ANDdescriptionLIKE'%AI%'; 或者:SELECTcustomer_nameFROMcustomersWHEREcustomer_nameLIKE'张%'OREmailLIKE'%@qq.com%';
性能优化: 避免前导通配符。
使用LIKE'关键字%'; 全文搜索优化长文本字段。
限制查询的范围。
WHEREcategory_id=1 2 3 ANDproduct_nameLIKE'%Pro%';
转义字符选择:数据中出现的转义字符。
兼容性:MySQL和PostgreSQL都支持ESCAPE,但语法不同。

实用提醒: 使用转义字符对数据中的特殊字符进行转义。

sql如何进行模糊查询

需要明确的是,SQL模糊查询主要有两种方法:LIKE和CHARINDEX。
但正确使用关键点可以省去很多麻烦。

我们先来说说最重要的LIKE。
去年我们跑一个电商项目的时候,使用LIKE时,后台搜索功能就卡住了。
花了一分钟的时间,查看了数百条数据。
后来发现WHERE条件写成‘%abc%’这样,全表扫描很暴力。
改写为LIKE'abc%'或LIKE'%abc',限制开始或结束位置,跑3 000级数据只需要3 秒。
另一件值得注意的事情是通配符的情况。
'a%bc%' 和 '%a%bc%' 完全不同。
第一个从头开始匹配,而第二个可以在任何地方找到。
还有一个更重要的细节。
LIKE前后添加空格可以过滤脏数据,例如用户输入“abc”时带空格。

CHARINDEX一开始以为比LIKE快,后来发现错了。
去年,我用 SQL Server 进行了测试。
CHARINDEX 在几秒钟内检查 VARCHAR 字段,但类型转换非常耗时。
CONVERT(varchar(5 0), field name) 本身被延迟。
另外,某些系统根本不支持 CHARINDEX 函数,因此您应该在使用它之前检查文档。
这将返回位置编号,CHARINDEX('abc', 字段名称)>0。
直接使用LIKE更直观。

等一下,还有一件事。
特别有可能受到不明确查询影响的是索引失败。
当LIKE放在前面时,如LIKE '%abc%',数据库根本无法使用索引。
因此,您应该留下不明确的术语,或者考虑全文索引。
坦白说,这很令人困惑。
在更改SQL语句之前,先到表结构中检查索引状态。

建议下次做模糊查询,先小步运行。
不要等到上线才发现速度很慢。
基本上使用 LIKE 没有什么问题,但在性能敏感的场景中你可能想尝试其他解决方案。

如何在SQL中使用LIKE?模糊查询的模式匹配技巧

嘿伙计,我们来谈谈我之前在数据库中使用 LIKE 所做的事情。
我记得有一次,我有一个客户数据库,必须过滤掉名字中带有“张”的客户。
当时我用的是LIKE'%张%'。
结果数据库中张姓的人太多,查询速度极慢。
后来我才知道,如果我用在前面的话,就得从头到尾扫描数据库,效率极低。

还有一次,我正在帮助朋友管理产品库存系统,我必须找到包含“1 00%”的产品代码。
我直接写了‘1 00% OFF’却发现找不到,因为数据库里没有直接匹配。
然后我变得更聪明,添加了一个 ESCAPE 子句并指定了转义字符,然后我成功地找到了这些产品。

我再次帮助一家公司对客户反馈进行排序,并且不得不排除包含“测试”一词的记录。
我使用了 NOT LIKE '%Test%',它效果很好,我立即过滤掉了需要处理的响应。

有时我也会将 LIKE 与 REGEXP/RLIKE 一起使用。
例如,我需要找到那些具有正确电子邮件格式的记录。
那么 REGEXP 就派上用场了。
我可以编写正则表达式并直接过滤格式正确的电子邮件地址。

不过话说回来,这东西虽然好用,但是性能有时候却是有问题的。
我之前就犯了一个错误,直接在前面加上%,导致全库表扫描,效率极低。
除非绝对必要,否则我会稍后注意并尽量避免使用前导通配符。

总之,LIKE操作符虽然强大,但是使用时一定要注意技巧,否则效果会很低。
要看具体情况,是简单的匹配模式还是复杂的模式,是追求性能还是精度。