SQLite - GLOB 子句
SQLite - 使用 GLOB 运算符进行模式匹配
Section titled “SQLite - 使用 GLOB 运算符进行模式匹配”SQLite 中的 GLOB 运算符在 WHERE 子句中使用,用于将文本值与模式进行匹配。它类似于 LIKE 运算符,但使用 Unix 风格的通配符,并且始终区分大小写。
GLOB 通配符
Section titled “GLOB 通配符”GLOB 支持三种类型的通配符:
- 星号 (*****): 匹配零个或多个字符的任意序列。
- 问号 (?): 匹配任意单个字符。
- 字符列表 ([…]): 匹配括号中出现的任何单个字符。您还可以使用插入符号 (^) 来反转匹配,例如,
[^abc]匹配除 ‘a’、‘b’ 或 ‘c’ 之外的任何字符。
SELECT column_listFROM table_nameWHERE column_name GLOB 'pattern';GLOB 与 LIKE 的区别
Section titled “GLOB 与 LIKE 的区别”这里有一个快速比较,帮助您选择正确的运算符:
| 特性 | GLOB | LIKE |
|---|---|---|
| 大小写敏感性 | 始终区分大小写 | 默认情况下不区分大小写(对于 ASCII)。可以使用 PRAGMA case_sensitive_like = ON; 使其区分大小写。 |
| 多字符通配符 | ***** (星号) | % (百分号) |
| 单字符通配符 | ? (问号) | _ (下划线) |
| 字符列表 | […] 和 [^…] | 不支持 |
| 常见用例 | 文件路径模式,严格匹配 | 通用文本搜索,SQL 标准 |
使用我们的 COMPANY 表,让我们探索一些 GLOB 查询。
示例 1:查找以 ‘P’ 或 ‘T’ 开头的姓名。
sqlite> SELECT NAME FROM COMPANY WHERE NAME GLOB '[PT]*';这将产生以下结果:
NAME----------PaulTeddy示例 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-MondSouth-Hall