在使用SQL进行数据查询时,
LIKE操作符是实现模糊匹配的核心工具,它允许我们根据特定的模式来检索字符串数据,而不是精确匹配。通过它,你可以轻松找到包含某个词、以某个字母开头或结尾,甚至在特定位置有特定字符的数据,极大地提升了查询的灵活性和实用性。 解决方案
LIKE的基本用法其实非常直观。它总是与
WHERE子句一起使用,用来筛选那些字符串列的值符合特定模式的行。模式中可以包含两种主要的通配符:百分号(
%)和下划线(
_)。
%代表零个、一个或多个任意字符,而
_则代表一个且仅一个任意字符。
举个例子,如果你想从一个
products表中找出所有名字中包含“手机”二字的产品,你可以这样写:
SELECT product_name, price FROM products WHERE product_name LIKE '%手机%';
这里,
%手机%意味着在
product_name的任何位置,只要有“手机”这两个字出现,这条记录就会被选中。这在我日常的数据分析工作中,尤其是在处理用户输入或不规范数据时,简直是神器。
如果我想找所有以“苹果”开头的商品,但后面具体是什么不确定,那就用
苹果%:
SELECT product_name FROM products WHERE product_name LIKE '苹果%';
反过来,要找所有以“电脑”结尾的,就是
%电脑。
至于下划线
_,它在需要精确匹配字符数量时特别有用。比如,我有一个编号规则是“字母+三位数字+字母”,像“A123B”,我想找出所有符合这个模式的,但第三位数字是5的编号,我可以这样:
-- 查找所有5个字符长,且第三个字符是'5'的product_code SELECT product_code FROM inventory WHERE product_code LIKE '__5__';
这比用
%5%要精确得多,后者会匹配任何位置有
5的字符串。 SQL中LIKE操作符的核心通配符有哪些,它们各自的用途是什么?
在SQL的
LIKE操作符中,真正赋予它“模糊”能力的,就是那两个核心通配符:百分号(
%)和下划线(
_)。理解它们是玩转
LIKE的关键。
%(百分号): 这个通配符是最常用的,也是最灵活的。它代表着零个、一个或多个任意字符。你可以把它想象成一个“万能匹配符”,无论前面或后面有多少字符,甚至没有字符,它都能“吞掉”。
'abc%'
:匹配所有以“abc”开头的字符串(例如:abc
、abcd
、abcxyz
)。'%xyz'
:匹配所有以“xyz”结尾的字符串(例如:xyz
、123xyz
、_xyz
)。'%mno%'
:匹配所有包含“mno”的字符串(例如:mno
、amno
、mno_p
、amno_p
)。'%'
:这个就厉害了,它能匹配任何非NULL的字符串。单独使用意义不大,但组合起来就强大了。
我个人在使用
%时,最喜欢用它来做关键词搜索,比如在一个巨大的商品描述字段里找某个特定的词。如果不用
%,我可能要写一堆
OR条件,或者用
FULLTEXT索引,但对于简单场景,
LIKE '%关键词%'简直是救星。

全面的AI聚合平台,一站式访问所有顶级AI模型


_(下划线): 相比
%的“贪婪”,
_显得更加“克制”和“精确”。它只代表一个且仅一个任意字符。这意味着如果你用三个
_,那就必须有且只有三个字符来匹配它们。
'a_c'
:匹配一个以“a”开头,以“c”结尾,中间只有一个任意字符的字符串(例如:abc
、axc
、a1c
)。但它不会匹配ac
(中间没有字符)或abcc
(中间有两个字符)。'___'
:匹配任何长度为三个字符的字符串。
_在需要固定长度或特定位置匹配时非常有用。比如,我曾经需要清理一些格式不规范的电话号码,我知道它们应该是11位数字,但有些可能混入了非数字字符。如果我想找出那些格式上是11位,但第二个字符是'9'的号码,我就可以用
'_9_________'。这比用正则表达式要简单得多,也更易读。
需要注意的是,
%和
_可以混合使用,以创建更复杂的模式。例如,
'a%b_c'会匹配以“a”开头,中间有任意字符,然后跟着一个“b”,再跟着一个任意字符,最后以“c”结尾的字符串。这种组合的灵活性,让
LIKE在很多场景下都能发挥出其独特的价值。 如何利用LIKE进行复杂模式匹配,实现更精准的查询?
当简单的
%和
_无法满足你的需求时,
LIKE的真正威力就体现在其组合和特殊字符处理上。要实现更精准的查询,我们需要考虑以下几点:
-
通配符的组合使用: 这是最基本的进阶技巧。比如,我想要找所有以“Data”开头,后面紧跟着至少两个字符,然后是“_Report”的文档名。
SELECT doc_name FROM documents WHERE doc_name LIKE 'Data__%_Report';
这里
__
确保了“Data”后面至少有两个字符,%
则匹配了更多的字符,直到_Report
。这种组合能让你精确到字符数量和相对位置。 -
转义特殊字符(
ESCAPE
子句): 有时候,你的数据本身就包含%
或_
这些通配符。如果你想把它们当作普通字符来匹配,而不是通配符,你就需要用到ESCAPE
子句。 比如,我有一个产品编号是100%OFF
,我想精确地查找到它。如果直接写LIKE '100%OFF'
,那%
会被当作通配符。 你需要指定一个转义字符,比如\
:SELECT product_code FROM products WHERE product_code LIKE '100\%OFF' ESCAPE '\';
这里,
\
后面的%
就被当作普通字符对待了。选择哪个字符作为转义符是自由的,只要它不在你的匹配模式中出现即可。我个人比较喜欢用\
,因为它在很多编程语言中也是常见的转义符,比较直观。 -
NOT LIKE
进行反向匹配: 除了匹配符合模式的数据,你也可以用NOT LIKE
来排除那些符合特定模式的数据。 例如,我想找出所有产品名中不包含“测试”字样的产品:SELECT product_name FROM products WHERE product_name NOT LIKE '%测试%';
这在数据清洗或者排除一些临时数据时非常有用。比如,我经常会遇到一些临时创建的以“temp”开头的数据表,用`NOT LIKE 'temp%'`就能在查询时很方便地避开它们。
-
结合
AND
/OR
进行多条件组合: 虽然LIKE
本身是针对单个模式,但结合逻辑操作符,你可以构建非常复杂的查询条件。 比如,我想找所有以“A”开头,并且包含“B”但不包含“C”的产品:SELECT product_name FROM products WHERE product_name LIKE 'A%' AND product_name LIKE '%B%' AND product_name NOT LIKE '%C%';
这已经超出了单个
LIKE
模式的能力,但通过逻辑组合,我们依然能用LIKE
实现非常精细的筛选。这种组合是日常数据探索和报告生成中不可或缺的。
当我们谈到SQL中的模式匹配,很容易就会联想到
LIKE,但很多数据库系统(如MySQL、PostgreSQL、Oracle等)还提供了更强大的正则表达式匹配功能,通常是
REGEXP或
RLIKE操作符。它们之间并非简单的强弱之分,而是各有侧重,理解它们的差异对于选择合适的工具至关重要。
LIKE的适用场景与特点:
-
简单直观:
LIKE
的语法非常简单,只有%
和_
两个通配符,上手快,易于理解。对于只需要匹配开头、结尾、包含特定子串或固定
以上就是如何在SQL中使用LIKE?模糊查询的模式匹配技巧的详细内容,更多请关注知识资源分享宝库其它相关文章!
相关标签: mysql oracle 正则表达式 电脑 编程语言 工具 苹果 联想 sql mysql 正则表达式 NULL 字符串 堆 regexp oracle postgresql 数据库 数据分析 大家都在看: 如何插入查询结果数据_SQL插入Select查询结果方法 SQL临时表存储聚合结果怎么做_SQL临时表存储聚合数据方法 Oracle数据源连接泄露防范_Oracle数据源连接泄漏预防措施 Oracle透明数据源怎么配置_Oracle透明数据源建立方法解析 SQLAVG函数计算时如何保留小数_SQLAVG函数保留小数位方法
发表评论:
◎欢迎参与讨论,请在这里发表您的看法、交流您的观点。