SQL LIKE 操作符介绍 – wiki基地


SQL LIKE 操作符深度解析:字符串模式匹配的利器

在数据库查询中,我们经常需要根据精确的值来查找数据。例如,查找姓名为“张三”的客户,或者订单号为“ORD12345”的订单。但很多时候,我们的需求更为灵活:我们可能只知道名称的一部分,或者希望找到所有符合某种特定格式的数据。这时,精确匹配就显得力不从心了。

SQL(Structured Query Language)作为关系型数据库的标准语言,提供了强大的工具来处理这类“模糊”查询的需求。其中,LIKE 操作符就是专门用于在 WHERE 子句中进行字符串模式匹配的核心工具。它允许我们使用通配符来定义搜索模式,从而灵活地检索符合特定模式的文本数据。

本文将带您深入了解 SQL LIKE 操作符,包括它的基本语法、核心通配符的用法、负向匹配、特殊字符的处理、性能考量以及与相关技术的比较,帮助您充分掌握这一在数据库查询中不可或缺的强大功能。

1. 什么是 SQL LIKE 操作符?

简单来说,LIKE 是 SQL 中用于在 WHERE 子句中执行模式匹配(pattern matching)的逻辑操作符。它不像 = 那样要求字符串完全相等,而是检查一个字符串是否符合我们预设的一个包含通配符的模式。如果字符串符合模式,则匹配成功,该行数据会被查询结果包含。

LIKE 通常与 SELECTUPDATEDELETE 语句中的 WHERE 子句一起使用,用来过滤出满足特定字符串模式的记录。

其基本语法结构如下:

sql
SELECT column1, column2, ...
FROM table_name
WHERE column_name LIKE pattern;

其中:
* column_name:您希望进行模式匹配的列名,通常是存储文本数据的列(如 VARCHAR, TEXT, NVARCHAR 等)。
* pattern:您定义的字符串模式,可以包含普通字符和特殊的通配符。

模式匹配的结果是一个布尔值:如果 column_name 的值匹配 pattern,则结果为真(True),否则为假(False)。

2. LIKE 的核心:通配符 (Wildcards)

LIKE 操作符之所以强大,是因为它引入了通配符的概念。通配符是模式中具有特殊含义的字符,它们不代表自身,而是代表一个或多个其他字符。SQL 标准定义了两个最主要的通配符:

  1. % (百分号):代表零个、一个或多个任意字符。
  2. _ (下划线):代表恰好一个任意字符。

理解这两个通配符的用法是掌握 LIKE 的关键。

2.1 通配符 %:任意长度匹配

% 通配符是最灵活的通配符。它可以匹配空字符串,也可以匹配任意数量的任何字符。

用法示例:

  • 模式:'A%'

    • 含义: 匹配任何以字母 ‘A’ 开头的字符串。
    • 示例匹配: ‘Apple’, ‘A’, ‘API接口’, ‘Access Database’
    • 示例不匹配: ‘Banana’, ‘Data’
    • SQL 语句: WHERE city LIKE 'L%'; (查找所有以 ‘L’ 开头的城市,如 ‘London’, ‘Los Angeles’)
  • 模式:'%A'

    • 含义: 匹配任何以字母 ‘A’ 结尾的字符串。
    • 示例匹配: ‘China’, ‘Data’, ‘alpha’
    • 示例不匹配: ‘Apple’, ‘Banana’
    • SQL 语句: WHERE product_name LIKE '%e'; (查找所有以 ‘e’ 结尾的产品名称,如 ‘Mouse’, ‘Keyboard’)
  • 模式:'%A%'

    • 含义: 匹配任何包含字母 ‘A’ 的字符串(’A’ 可以出现在字符串的任意位置,包括开头或结尾)。
    • 示例匹配: ‘Apple’, ‘Banana’, ‘Data’, ‘CAT’
    • 示例不匹配: ‘Dog’, ‘Bird’
    • SQL 语句: WHERE description LIKE '%error%'; (查找描述中包含单词 ‘error’ 的所有记录)
  • 模式:'A%B'

    • 含义: 匹配任何以 ‘A’ 开头、以 ‘B’ 结尾的字符串。’A’ 和 ‘B’ 之间可以有零个或多个任意字符。
    • 示例匹配: ‘AB’, ‘A_B’, ‘Apple Pie is Bad’
    • 示例不匹配: ‘AC’, ‘CAB’, ‘BA’
    • SQL 语句: WHERE file_name LIKE 'data%.csv'; (查找所有以 ‘data’ 开头,以 ‘.csv’ 结尾的文件名)

特别注意: 如果 pattern 只是一个 '%',它将匹配 所有 字符串(包括空字符串,如果列允许的话),等同于没有 WHERE 子句(在非 NULL 列上),或者 WHERE column_name IS NOT NULL (在可空列上)。实际上,WHERE column LIKE '%' 会返回该列所有非 NULL 的行。

2.2 通配符 _:单字符匹配

_ 通配符用于匹配模式中特定位置上的 一个 任意字符。它代表一个固定长度的占位符。

用法示例:

  • 模式:'A_C'

    • 含义: 匹配任何以 ‘A’ 开头,以 ‘C’ 结尾,且中间恰好有一个任意字符的字符串。
    • 示例匹配: ‘ABC’, ‘A1C’, ‘A C’
    • 示例不匹配: ‘AC’, ‘ABCD’, ‘AxzC’
    • SQL 语句: WHERE code LIKE '___'; (查找所有恰好是三个字符的代码)
  • 模式:'_apple'

    • 含义: 匹配任何以一个任意字符开头,后面紧跟着 ‘apple’ 的字符串。
    • 示例匹配: ‘1apple’, ‘aapple’, ‘ apple’
    • 示例不匹配: ‘apple’, ‘redapple’
    • SQL 语句: WHERE phone LIKE '___-____'; (查找符合 ‘XXX-XXXX’ 格式的电话号码,例如 ‘123-4567’)
  • 模式:'C_T'

    • 含义: 匹配以 ‘C’ 开头,倒数第二个字符是 ‘T’,且最后一个字符是任意字符的字符串。
    • 示例匹配: ‘CAT’, ‘CUT’, ‘CoT’
    • 示例不匹配: ‘CT’, ‘CAR’, ‘CATTLE’
    • SQL 语句: WHERE product_code LIKE 'A_C_%'; (查找以 ‘A’ 开头,第二个字符是任意字符,第三个字符是 ‘C’,后面跟着任意字符序列的产品代码)

2.3 结合使用 %_

在实际应用中,我们经常会将 %_ 结合起来使用,以构建更复杂的模式。

用法示例:

  • 模式:'A%_C'

    • 含义: 匹配任何以 ‘A’ 开头,以 ‘C’ 结尾,且在 ‘A’ 和 ‘C’ 之间至少有一个任意字符的字符串。这里的 % 匹配零个或多个字符,_ 匹配一个字符。如果 % 匹配零个字符,则模式退化为 '_C',但这不可能以 ‘A’ 开头,所以实际上 % 必须匹配至少一个字符,或者 _ 匹配一个字符且 % 匹配剩余部分。更准确地说,它匹配任何以 ‘A’ 开头,并且倒数第二个字符前的任意位置上有字符,且最后一个字符是 ‘C’ 的字符串。
    • 示例匹配: ‘AC’ (此时 %匹配零个字符,_匹配C前的字符,然后C是最后一个), ‘ABC’, ‘A_C’, ‘APPLE_JUICE_IS_SWEET_C’
    • 示例不匹配: ‘A’, ‘C’, ‘AB’, ‘BC’
    • SQL 语句: WHERE item_id LIKE 'INV-%_A'; (查找以 ‘INV-‘ 开头,后面跟着任意字符,但倒数第二个字符是 ‘A’ 的商品ID)
  • 模式:'_%@%._%'

    • 含义: 这是一个常见的模式,用于粗略匹配电子邮件地址的格式。它表示:一个任意字符开头 (_),后面跟着零个或多个任意字符 (%),然后是 ‘@’ 符号,接着是零个或多个任意字符 (%),然后是 ‘.’ 符号,最后是零个或多个任意字符 (%)。这能匹配 [email protected], [email protected], _@_.a 等基本符合邮件格式的字符串。
    • SQL 语句: WHERE email LIKE '_%@%._%'; (查找格式看起来像电子邮件地址的字符串)

通过组合使用 %_,您可以构建出非常灵活和精细的模式来满足各种数据检索需求。

3. 负向匹配:NOT LIKE

与大多数 SQL 操作符一样,LIKE 也有其对应的负向形式:NOT LIKENOT LIKE 用于查找不符合指定模式的字符串。

语法:

sql
SELECT column1, column2, ...
FROM table_name
WHERE column_name NOT LIKE pattern;

用法示例:

  • 查找所有不以 ‘A’ 开头的城市:
    sql
    SELECT city FROM locations WHERE city NOT LIKE 'A%';

  • 查找所有不包含 ‘error’ 字样的描述:
    sql
    SELECT description FROM logs WHERE description NOT LIKE '%error%';

  • 查找所有不是恰好五个字符的代码:
    sql
    SELECT code FROM items WHERE code NOT LIKE '_____';

NOT LIKE 的逻辑非常直观,就是 LIKE 结果的非集。

4. 处理特殊字符:ESCAPE 子句

有时候,您的模式中需要匹配字符本身就是通配符(%_)的情况。例如,您想查找包含字面量 ‘%’ 或 ‘_’ 的字符串,而不是将它们解释为通配符。直接在模式中写 '%''_' 会被误解。

为了解决这个问题,SQL 提供了 ESCAPE 子句。ESCAPE 子句允许您指定一个转义字符(escape character),紧跟在转义字符后面的通配符(%_)将被视为普通字符,而不是通配符。

语法:

sql
SELECT column1, column2, ...
FROM table_name
WHERE column_name LIKE pattern ESCAPE 'escape_character';

其中:
* pattern:包含需要转义的通配符的模式。
* escape_character:您选择用作转义的单个字符。这个字符本身不能是 %_。常见的选择是反斜杠 \ 或井号 #

用法示例:

假设您想查找包含字面量 ‘%’ 的字符串,例如 ‘50%’。如果您直接写 LIKE '%50%%',后面的两个 % 都会被解释为通配符。您需要使用转义字符。

  • 使用 \ 作为转义字符:
    sql
    SELECT value FROM percentages WHERE value LIKE '50\%' ESCAPE '\';

    • 这里的 50\ 后面的 \% 表示匹配字面量 ‘%’。前面的 50 和后面的 % 是普通字符和通配符。这个模式将匹配以 ‘50%’ 开头,后面可以跟任意字符的字符串。如果只想匹配精确的 ‘50%’,模式应该是 '50\%' ESCAPE '\'.
    • 示例匹配: ‘50%’, ‘50% off’, ‘Price 50% higher’
    • 示例不匹配: ’50 percent’, ‘100%’
  • 查找包含字面量 ‘_’ 的字符串,使用 # 作为转义字符:
    sql
    SELECT file_name FROM documents WHERE file_name LIKE 'report#_2023%' ESCAPE '#';

    • 这里的 #_ 表示匹配字面量 ‘‘。模式匹配以 ‘report‘ 开头,后面跟着 ‘2023’ 和任意字符序列的字符串。
    • 示例匹配: ‘report_2023.txt’, ‘report_2023_final.doc’
    • 示例不匹配: ‘report-2023.txt’, ‘reportX2023.doc’

注意: 如果您选择的转义字符本身也需要在模式中匹配,您需要对转义字符本身进行转义,即写两次转义字符。例如,使用 \ 作为转义字符,要匹配字面量 \,模式中需要写 \\LIKE '%\\%' ESCAPE '\' 将查找包含字面量 \ 的字符串。

ESCAPE 子句是处理模式匹配中特殊字符的必备工具,确保您的模式能够准确表达意图。

5. 大小写敏感性 (Case Sensitivity)

使用 LIKE 进行模式匹配时,一个非常重要的考量是大小写是否敏感。SQL 标准本身并没有规定 LIKE 必须区分或不区分大小写。 大小写敏感性取决于以下因素:

  1. 数据库系统 (Database System): 不同的数据库系统有不同的默认行为。

    • SQL Server: 通常取决于数据库或列的排序规则 (collation)。默认情况下,很多排序规则是不区分大小写的 (CI 后缀,如 SQL_Latin1_General_CP1_CI_AS),但也可以配置为区分大小写 (CS 后缀)。
    • MySQL: 取决于操作系统和表的存储引擎,以及列的字符集和排序规则。在大多数默认设置下,LIKE 通常是不区分大小写的,但可以使用 BINARY 关键字或更改排序规则来实现区分大小写。
    • PostgreSQL: 默认情况下是区分大小写的。如果需要不区分大小写的匹配,可以使用 ILIKE 操作符(PostgreSQL 特有)或使用 LOWER() / UPPER() 函数。
    • Oracle: 默认情况下是区分大小写的。可以使用 UPPER()LOWER() 函数来实现不区分大小写的匹配。
  2. 数据库/表的排序规则 (Collation): 排序规则定义了字符串的比较规则,包括大小写敏感性、重音敏感性等。这是影响 LIKE 行为最直接的因素。

如何实现期望的大小写行为?

  • 如果数据库/排序规则默认行为符合要求: 直接使用 LIKE 即可。
  • 如果需要不区分大小写匹配,而默认是区分大小写的:

    • 使用数据库特有的不区分大小写操作符(如 PostgreSQL 的 ILIKE)。
    • 将列和模式都转换为相同的大小写进行比较(通常是转换为小写)。这是跨数据库系统实现不区分大小写搜索的最通用方法:
      sql
      SELECT column1 FROM table_name
      WHERE LOWER(column_name) LIKE LOWER('pattern');
      -- 或者
      WHERE UPPER(column_name) LIKE UPPER('pattern');
    • 修改列或表的排序规则(需要数据库管理员权限,可能影响其他操作)。
  • 如果需要区分大小写匹配,而默认是不区分大小写的:

    • 使用数据库特有的区分大小写操作符(如 MySQL 的 BINARY 关键字)。
    • 修改列或表的排序规则。

因此,在编写使用 LIKE 的 SQL 查询时,了解您所使用的数据库系统及其配置非常重要,并根据需要采取相应的策略(如使用 LOWER/UPPER 函数)来确保查询结果的准确性,特别是在需要跨平台或对大小写有明确要求的场景下。

6. LIKE 操作符的性能考量

尽管 LIKE 非常灵活和方便,但在大型数据集上频繁使用时,可能会引发性能问题。理解其性能影响因素有助于写出更高效的查询。

主要的性能瓶颈在于模式中是否使用了前导通配符 (%_)。

  • 模式不含前导通配符 (e.g., 'A%', 'ABC%', 'A_C%')

    • 如果被查询的列上建有索引(例如 B-tree 索引),数据库系统通常能够有效地利用这个索引。索引是按照数据的排序顺序存储的,数据库可以快速定位到模式匹配的起始位置(例如,所有以 ‘A’ 开头的数据),然后顺序扫描或使用索引的其他部分来找到所有匹配项。这通常是比较高效的。
  • 模式含有前导通配符 (e.g., '%A', '%ABC', '%A%', '_ABC%')

    • 当模式以 %_ 开头时,数据库系统很难利用标准的 B-tree 索引。B-tree 索引是基于前缀匹配的。当您搜索 'ABC%' 时,数据库可以跳到索引中 ‘ABC’ 附近的位置开始查找。但当您搜索 '%ABC' 时,数据库不知道哪些行的结尾是 ‘ABC’,它必须扫描 所有 可能相关的索引项或甚至全表扫描,检查每一行的该列值是否符合模式。
    • 尤其是 '%pattern%' 这种包含前导和后导通配符的模式,几乎总是导致全表扫描 (Full Table Scan),因为数据库必须检查表中的每一行数据。这在表非常大时会非常慢。

优化 LIKE 查询性能的策略:

  1. 避免使用前导通配符 (%): 如果业务需求允许,尽量设计模式使其不以 % 开头。例如,如果用户经常搜索名字的后半部分,考虑将名字反转存储在另一个列中,然后在反转列上使用 LIKE 模式不带前导通配符的查询。
  2. 使用更高效的索引技术: 对于需要频繁进行模糊搜索的文本列,考虑使用专门为文本搜索设计的索引:
    • Full-Text Indexes (全文索引): 许多数据库系统支持全文索引(如 MySQL 的 FULLTEXT, SQL Server 的 FULLTEXT, PostgreSQL 的 GIN/GIST 索引与 pg_trgm 扩展)。全文索引是专门用于文本内容搜索的,对于查找包含某个词语或短语(类似于 ' %word% ' 的需求)非常高效,并且支持更复杂的搜索功能(如近义词、排名等)。对于包含大量文本数据且需要频繁进行“包含”搜索的场景,全文索引是比 LIKE '%pattern%' 更好的选择。
    • Trigram Indexes (三元词索引): 例如 PostgreSQL 的 pg_trgm 扩展提供的 GIN 或 GIST 索引。这些索引基于字符串的三元词(连续的三个字符序列)进行索引,可以有效地加速 '%pattern%' 这样的模糊匹配查询。
  3. 限制搜索范围: 如果可能,在 LIKE 子句之前使用其他条件(如日期范围、类别等)来缩小需要进行模式匹配的数据集。例如:WHERE category = 'Electronics' AND description LIKE '%waterproof%';
  4. 对于小型表: 如果表数据量不大,全表扫描的开销可以接受,此时 LIKE 的性能通常不是主要问题。
  5. 考虑其他字符串函数: 对于简单的包含检查,有时 POSITION() / INSTR() / CHARINDEX()SUBSTRING() / SUBSTR() 等函数可能比 LIKE 更适合,并且在某些情况下可能更容易优化。但这些函数本身进行模式匹配的能力不如 LIKE 灵活。
  6. 缓存结果: 对于不经常变化的数据,可以考虑将模糊搜索的结果缓存起来,减少重复查询。

总之,对于小型或不重要的表,LIKE 的性能通常可以忽略。但对于大型表或性能敏感的应用,尤其是使用前导通配符时,务必关注其性能影响,并考虑使用索引优化或选择更适合的文本搜索技术。

7. LIKE 与其他文本匹配方法的比较

除了 LIKE,SQL 和数据库系统还提供了其他用于处理字符串或文本数据的方法。了解它们与 LIKE 的区别有助于在不同场景下选择最合适的工具。

  • = 操作符: 用于精确匹配。要求整个字符串完全相同。比 LIKE 更快,因为它不涉及模式匹配和通配符解析,并且可以充分利用标准索引。适用于查找已知完整值的场景。
    sql
    WHERE city = 'London'; -- 只能匹配 'London'

  • REGEXP / RLIKE 操作符: (并非所有数据库系统都支持,但常见的如 MySQL, PostgreSQL (通过 ~/~*), Oracle (通过 REGEXP_LIKE) 支持)用于使用正则表达式进行模式匹配。正则表达式比 LIKE 的通配符强大得多,可以描述更复杂、更灵活的模式(例如,匹配电子邮件地址的严格格式、验证手机号码格式等)。
    sql
    -- MySQL 示例:查找符合简单邮箱格式的字符串
    WHERE email REGEXP '^[A-Za-z0-9._%+-]+@[A-Za-z0-9.-]+\.[A-Za-z]{2,}$';

    REGEXP 功能强大,但也更复杂,并且通常比 LIKE 性能开销更大,尤其是不当使用时。它通常也不能很好地利用标准索引,可能需要专门的索引(如基于函数的索引或全文索引)。适用于需要复杂模式匹配的场景。

  • POSITION() / INSTR() / CHARINDEX() 等函数: 用于查找一个子字符串在另一个字符串中出现的位置。如果返回的位置大于 0,说明子字符串存在。
    sql
    -- 标准 SQL 的 POSITION 函数,返回子字符串第一次出现的位置,如果不存在则返回 0
    WHERE POSITION('error' IN description) > 0;

    这个方法可以实现类似 LIKE '%pattern%' 的“包含”功能,但它只能查找一个固定的子字符串,不能使用通配符。在某些数据库系统中,使用这些函数结合索引可能比 LIKE '%pattern%' 稍有优势,但在大多数情况下,对于简单的包含检查,它们与 LIKE '%pattern%' 的性能可能相似,都会导致全表扫描。它们不适用于需要匹配可变模式的场景(如 '%A%')。

  • SUBSTRING() / SUBSTR() 函数: 用于提取字符串的一部分。可以结合其他函数或操作符来检查子字符串。
    sql
    -- 检查前两个字符是否是 'US'
    WHERE SUBSTRING(country_code, 1, 2) = 'US';

    这个方法可以实现类似 LIKE 'pattern%'LIKE '_pattern%' 这样的前缀或特定位置匹配,但需要明确指定位置和长度,不如 LIKE 结合通配符灵活。通常用于提取已知位置的子字符串进行精确比较。

  • 全文搜索 (Full-Text Search): 如前所述,这是一种专门为文本内容设计的高级搜索技术。它使用专门的索引结构,可以高效地搜索大量文本数据中的关键词、短语,支持模糊匹配、词干提取、相关性排序等功能。对于文章内容、产品描述等长文本字段的搜索,全文搜索通常是比 LIKEREGEXP 更好的选择,能够提供更相关和更快的搜索结果。

选择哪种方法取决于您的具体需求:
* 精确匹配: =
* 简单通配符模式匹配: LIKE (最常用,特别是前缀匹配)
* 复杂正则表达式模式匹配: REGEXP / RLIKE
* 简单的子字符串包含检查: POSITION() 等函数 (功能受限)
* 固定位置/长度的子字符串检查: SUBSTRING() 等函数
* 大量文本内容的高效、灵活搜索: 全文搜索

8. 实际应用场景举例

LIKE 操作符在实际开发中有广泛的应用:

  • 用户搜索功能: 实现基于用户输入关键字的模糊搜索,例如搜索包含特定词语的产品名称、文章标题等。
    sql
    WHERE product_name LIKE '%手机%';
    WHERE article_title LIKE '%数据库%';
  • 数据清洗和验证: 查找不符合特定格式的数据,例如查找不以特定前缀开头的订单号,或者不符合常见邮件格式的邮箱地址(尽管 REGEXP 更适合严格验证)。
    sql
    WHERE order_id NOT LIKE 'ORD%';
    WHERE email NOT LIKE '%@%.%'; -- 简单的排除不包含 '@' 和 '.' 的字符串
  • 报告和分析: 按特定模式对数据进行分组或过滤,例如统计所有以“北”开头的城市的客户数量。
    sql
    SELECT COUNT(*) FROM customers WHERE city LIKE '北%';
  • 查找特定类型的文件或资源: 在存储文件名的字段中查找所有图片文件(.jpg, .png 等)或文档文件。
    sql
    WHERE file_name LIKE '%.jpg' OR file_name LIKE '%.png' OR file_name LIKE '%.gif';

    或者更简洁地使用 OR 结合 LIKE
    sql
    WHERE file_name LIKE '%.%'; -- 查找所有包含 '.' 的文件名
    WHERE file_name LIKE '%.doc' OR file_name LIKE '%.docx' OR file_name LIKE '%.pdf';
  • 匹配电话号码或邮政编码等格式: 查找符合特定格式的联系信息。
    sql
    WHERE phone_number LIKE '(___)___-____'; -- 匹配 (XXX)XXX-XXXX 格式 (请注意这里需要10个下划线,前面3个,后面7个)
    -- 考虑到实际中括号和连字符可能是字面量,模式应为:
    WHERE phone_number LIKE '(____)____-____' ESCAPE '\'; -- 匹配 (XXX)XXX-XXXX 格式,假设下划线是转义字符

    一个更准确的例子,匹配美国格式电话号码 XXX-XXX-XXXX
    sql
    WHERE phone_number LIKE '___-___-____';

这些例子展示了 LIKE 在各种数据查询和处理任务中的灵活性和实用性。

9. 总结

SQL 的 LIKE 操作符是进行字符串模式匹配的核心工具,它允许我们使用通配符 (%_) 来灵活地检索符合特定模式的文本数据。

  • % 匹配零个或多个任意字符。
  • _ 匹配恰好一个任意字符。
  • NOT LIKE 用于查找不符合指定模式的数据。
  • ESCAPE 子句用于处理需要匹配字面量通配符的场景。
  • LIKE 的大小写敏感性取决于数据库系统和排序规则,通常可以使用 LOWER()UPPER() 函数来实现跨平台的、期望的大小写行为。
  • 使用 LIKE 时需要注意性能问题,特别是模式以 %_ 开头时,可能导致全表扫描。优化方法包括避免前导通配符、使用全文索引或三元词索引、限制搜索范围等。
  • 对于复杂的模式匹配,正则表达式 (REGEXP) 更强大;对于大量文本内容搜索,全文搜索是更好的选择。对于简单的包含或子字符串检查,其他函数也可能是替代方案。

掌握 LIKE 操作符及其通配符的用法,理解其工作原理和性能特性,并结合其他 SQL 功能和数据库特定的优化手段,您就能在处理文本数据时更加得心应手,编写出高效且准确的查询语句。在数据库开发和数据分析工作中,LIKE 无疑是您工具箱中不可或缺的一把利器。


发表评论

您的邮箱地址不会被公开。 必填项已用 * 标注

滚动至顶部