Skip to main content

基于模式匹配的类SQLite数据查询

类SQLite算子简介

有时,您不知道要查询的完整关键字。例如,你可能知道你最喜欢的歌曲包含单词“电梯”,但你不知道确切的名字。

要基于部分信息查询数据,请在SELECT语句的WHERE子句中使用LIKE运算符,如下所示:

SELECT
column_list
FROM
table_name
WHERE
column_1 LIKE pattern;

请注意,您还可以在其他语句(如DELETE和UPDATE)的WHERE子句中使用LIKE运算符。

SQLite为构建模式提供了两个通配符。它们是百分号%和下划线u:

百分号%通配符示例

使用百分号通配符(%)的s%模式匹配任何以s开头的字符串,例如son等等。

%er模式匹配任何以er结尾的字符串,如peter、clever等。

并且%per%模式匹配任何包含per的字符串,例如percent和peeper。

下划线uu通配符示例

h_nt模式匹配hunt、hint等。而___。意思是“A”像“A”一样是真的。

但是,对于不在ASCII范围内的Unicode字符,LIKE运算符区分大小写,例如,“Ä”LIKE“ä”为false。如果要使LIKE运算符区分大小写工作,则需要使用以下PRAGMA:

PRAGMA case_sensitive_like = true;

类似SQLite的示例

我们将使用示例数据库中的表轨迹进行演示。

要查找名称以通配符字符串开头的曲目,请在模式末尾使用百分号%通配符。

SELECT
trackid,
name
FROM
tracks
WHERE
name LIKE 'Wild%'

试试看

SQLite LIKE percent sign wildcard

要查找名称以Wild word结尾的曲目,请在模式开头使用%通配符。

SELECT
trackid,
name
FROM
tracks
WHERE
name LIKE '%Wild'

试试看

SQLite LIKE example

要查找名称包含通配符字符串的曲目,请在模式的开头和结尾使用%通配符:

SELECT
trackid,
name
FROM
tracks
WHERE
name LIKE '%Wild%';

试试看

SQLite LIKE wildcard example

下面的语句查找名称包含以下内容的曲目:零个或多个字符(%),后跟Br,后跟一个字符(u),后跟wn,后跟零个或多个字符(%)。

SELECT
trackid,
name
FROM
tracks
WHERE
name LIKE '%Br_wn%';

试试看

带转义子句的类SQLite

如果要匹配的模式包含%或ux,则必须在可选的转义子句中使用转义字符,如下所示:

column_1 LIKE pattern ESCAPE expression;

当指定ESCAPE子句时,LIKE运算符将把ESCAPE关键字后面的表达式计算为一个由单个字符或转义字符组成的字符串。

然后,您可以在模式中使用此转义字符来包括文字百分号(%)或下划线(389;)。LIKE运算符将转义字符后面的百分号(%)或下划线(389;)计算为文字字符串,而不是通配符。

假设您想在表的一列中匹配字符串10%。但是,SQLite将百分比符号%解释为通配符。因此,需要使用转义字符转义此百分比符号%:

column_1 LIKE '%10\%%' ESCAPE '\';

在此表达式中,LIKE运算符将第一个%和最后一个%符号解释为通配符,将第二个%符号解释为文字百分比符号。

请注意,您可以使用其他字符作为转义字符,例如/、@、$。

考虑下面的例子:

首先,创建一个有一列的表t:

CREATE TABLE t(
c TEXT
);

接下来,在表t中插入一些行:

INSERT INTO t(c)
VALUES('10% increase'),
('10 times decrease'),
('100% vs. last year'),
('20% increase next year');

然后,从t表中查询数据:

SELECT * FROM t;
c                     
----------------------
10% increase
10 times decrease
100% vs. last year
20% increase next year

第四,尝试查找c列中的值包含10%文本字符串的行:

SELECT c 
FROM t
WHERE c LIKE '%10%%';

但是,它返回的行在c列中的值包含10:

c                 
------------------
10% increase
10 times decrease
100% vs. last year

第五,为了得到正确的结果,可以使用ESCAPE子句,如下查询所示:

SELECT c 
FROM t
WHERE c LIKE '%10\%%' ESCAPE '\';

以下是结果集:

c           
------------
10% increase

在本教程中,您已经学习了如何使用类似SQLite的运算符,基于使用两个通配符百分号(%)和下划线(389;)的模式匹配来查询数据。