SQLite GLOB 子句
GLOB子句用于进行模式匹配,类似于LIKE子句,但它使用的是 Unix 风格的通配符,具有不同的匹配规则。GLOB用于匹配字符串中符合指定模式的记录,并且它是区分大小写的。
基本语法
SELECT column_name(s)
FROM table_name
WHERE column_name GLOB pattern;
column_name: 你希望应用GLOB匹配的列。pattern: 用于匹配的模式,可以包含特定的通配符。
GLOB 使用的通配符
GLOB 支持与 LIKE 子句不同的通配符,基于 Unix 文件名的匹配方式。它主要支持以下通配符:
*: 匹配零个或多个字符。类似于LIKE中的%。?: 匹配一个单独的字符。类似于LIKE中的_。[]: 匹配括号中的任何一个字符。例如,[abc]匹配a、b或c中的任意一个字符。
1. 使用 * 通配符
* 匹配零个或多个字符,这类似于 LIKE 中的 %。
示例:
- 查找所有
name字段包含John的记录:
SELECT * FROM employees
WHERE name GLOB '*John*';
- 该查询返回所有
name字段中包含John的记录,John可以出现在字符串的任何位置。 - 查找所有以
J开头的员工名字:
SELECT * FROM employees
WHERE name GLOB 'J*';
- 该查询返回所有以
J开头的名字。 - 查找所有以
n结尾的员工名字:
SELECT * FROM employees
WHERE name GLOB '*n';
- 该查询返回所有以
n结尾的名字。
2. 使用 ? 通配符
? 匹配一个单独的字符,这与 LIKE 子句中的 _ 匹配一个字符类似。
示例:
- 查找名字中第二个字符是
o的员工:
SELECT * FROM employees
WHERE name GLOB '?o*';
- 该查询返回所有名字中第二个字符是
o的员工。 - 查找名字中第三个字符是
n的员工:
SELECT * FROM employees
WHERE name GLOB '??n*';
- 该查询返回所有名字中第三个字符是
n的员工。
3. 使用 [] 匹配字符范围
[] 匹配一组字符中的任意一个字符。你可以使用字符范围(例如 a-z)来匹配一类字符。
示例:
- 查找名字中第二个字符是
a或e的员工:
SELECT * FROM employees
WHERE name GLOB '?[ae]*';
- 该查询返回所有名字中第二个字符是
a或e的员工。 - 查找名字中第三个字符是字母
a到f范围内的员工:
SELECT * FROM employees
WHERE name GLOB '??[a-f]*';
- 该查询返回所有名字中第三个字符在
a到f范围内的员工。
4. 区分大小写
与 LIKE 不同,GLOB 是区分大小写的。它不会自动忽略大小写,因此,在进行匹配时需要确保大小写一致。
示例:
- 查找名字为
John的员工(严格区分大小写):
SELECT * FROM employees
WHERE name GLOB 'John';
- 该查询仅返回名字严格为
John的员工,john或JOHN等其他大小写组合将不匹配。
5. 使用 NOT GLOB
NOT GLOB 用于查找不符合指定模式的记录。
示例:
- 查找名字不包含
John的员工:
SELECT * FROM employees
WHERE name NOT GLOB '*John*';
- 该查询返回所有名字中不包含
John的员工记录。
总结
GLOB用于进行模式匹配,基于 Unix 风格的通配符。- 支持以下通配符:
*: 匹配零个或多个字符(类似于LIKE的%)。?: 匹配一个字符(类似于LIKE的_)。[]: 匹配字符集中的任意一个字符。GLOB区分大小写,这与LIKE的默认行为不同(LIKE不区分大小写)。NOT GLOB用于查找不匹配指定模式的记录。
GLOB 适用于需要进行严格模式匹配并且区分大小写的场景。更多详细内容请关注其他相关文章。