Skip to content

SQLite - GLOB 子句

SQLite - 使用 GLOB 运算符进行模式匹配

Section titled “SQLite - 使用 GLOB 运算符进行模式匹配”

SQLite 中的 GLOB 运算符在 WHERE 子句中使用,用于将文本值与模式进行匹配。它类似于 LIKE 运算符,但使用 Unix 风格的通配符,并且始终区分大小写。

GLOB 支持三种类型的通配符:

  • 星号 (*****): 匹配零个或多个字符的任意序列。
  • 问号 (?): 匹配任意单个字符。
  • 字符列表 ([…]): 匹配括号中出现的任何单个字符。您还可以使用插入符号 (^) 来反转匹配,例如,[^abc] 匹配除 ‘a’、‘b’ 或 ‘c’ 之外的任何字符。
SELECT column_list
FROM table_name
WHERE column_name GLOB 'pattern';

这里有一个快速比较,帮助您选择正确的运算符:

特性GLOBLIKE
大小写敏感性始终区分大小写默认情况下不区分大小写(对于 ASCII)。可以使用 PRAGMA case_sensitive_like = ON; 使其区分大小写。
多字符通配符***** (星号)% (百分号)
单字符通配符? (问号)_ (下划线)
字符列表[…] 和 [^…]不支持
常见用例文件路径模式,严格匹配通用文本搜索,SQL 标准

使用我们的 COMPANY 表,让我们探索一些 GLOB 查询。

示例 1:查找以 ‘P’ 或 ‘T’ 开头的姓名。

sqlite> SELECT NAME FROM COMPANY WHERE NAME GLOB '[PT]*';

这将产生以下结果:

NAME
----------
Paul
Teddy

示例 2:查找所有恰好是 4 个字符长且以 ‘m’ 结尾的姓名。

sqlite> SELECT NAME FROM COMPANY WHERE NAME GLOB '???m';

这将产生以下结果:

NAME
----------
Kim

示例 3:查找包含连字符的地址。

sqlite> SELECT ADDRESS FROM COMPANY WHERE ADDRESS GLOB '*-*';

这将产生以下结果:

ADDRESS
----------
Rich-Mond
South-Hall