SQLite - LIKE 子句
SQLite - LIKE 运算符
Section titled “SQLite - LIKE 运算符”SQLite 的 LIKE 运算符用于 WHERE 子句中,以在字符串列中搜索指定的模式。它是实现灵活文本匹配的强大工具。
LIKE 运算符使用两个通配符:
- 百分号 (
%):代表零个、一个或多个字符。 - 下划线 (
_):代表单个字符。
LIKE 运算符在 WHERE 子句中的用法如下:
SELECT column1, column2, ...FROM table_nameWHERE column_name LIKE 'pattern';以下是常见的模式示例:
| 模式 | 描述 |
|---|---|
'A%' | 查找以 ‘A’ 开头的任何值。 |
'%a' | 查找以 ‘a’ 结尾的任何值。 |
'%lux%' | 查找在任何位置包含 ‘lux’ 的任何值。 |
'_r%' | 查找第二个位置包含 ‘r’ 的任何值。 |
'A_%' | 查找以 ‘A’ 开头且至少两个字符长的任何值。 |
'A__% | 查找以 ‘A’ 开头且至少三个字符长的任何值。 |
'B%t' | 查找以 ‘B’ 开头且以 ‘t’ 结尾的任何值。 |
让我们考虑一个 CUSTOMERS 表,其中包含以下记录:
ID NAME EMAIL---------- -------------- ----------------------1 Paul Smith paul.s@example.com2 Allen Jones allen.j@work.net3 Teddy Becker teddy.b@example.com4 Mark Wright mark.w@example.org5 David Austin dave.a@work.net此查询查找所有电子邮件来自 example.com 域的客户:
sqlite> SELECT * FROM CUSTOMERS WHERE EMAIL LIKE '%@example.com';
ID NAME EMAIL---------- -------------- ----------------------1 Paul Smith paul.s@example.com3 Teddy Becker teddy.b@example.com4 Mark Wright mark.w@example.org此查询查找所有姓名以 ‘A’ 开头且至少有 5 个字符的客户:
sqlite> SELECT * FROM CUSTOMERS WHERE NAME LIKE 'A____%';
ID NAME EMAIL---------- -------------- ----------------------2 Allen Jones allen.j@work.net如果您需要搜索字面上的 % 或 _ 怎么办?您可以使用 ESCAPE 子句指定一个转义字符。
-- 假设我们有一个折扣表-- NAME VALUE-- ----------- ------- 'Sale_50' '50%'-- 'Sale_75' '75%'
-- 查找正好是 '50%' 的折扣SELECT * FROM DISCOUNTS WHERE VALUE LIKE '50\%' ESCAPE '\';额外内容:GLOB 运算符
Section titled “额外内容:GLOB 运算符”SQLite 还提供了一个非标准的 GLOB 运算符,它使用 Unix 风格的通配符。默认情况下,它是区分大小写的。
- 星号 (
*):等同于LIKE的%。 - 问号 (
?):等同于LIKE的_。
-- 使用 GLOB 查找以 .net 结尾的电子邮件(区分大小写)sqlite> SELECT * FROM CUSTOMERS WHERE EMAIL GLOB '*.net';
ID NAME EMAIL---------- -------------- ------------------2 Allen Jones allen.j@work.net5 David Austin dave.a@work.net