SQLite Glob 子句

sqlite glob 子句

sqlite 的 glob 运算符是用来匹配通配符指定模式的文本值。如果搜索表达式与模式表达式匹配,glob 运算符将返回真(true),也就是 1。与 like 运算符不同的是,glob 是大小写敏感的,对于下面的通配符,它遵循 unix 的语法。

  • 星号 (*)
  • 问号 (?)

星号(*)代表零个、一个或多个数字或字符。问号(?)代表一个单一的数字或字符。这些符号可以被组合使用。

 

1. 语法

* 和 ? 的基本语法如下:

select from table_name
where column glob 'xxxx*'

or 

select from table_name
where column glob '*xxxx*'

or

select from table_name
where column glob 'xxxx?'

or

select from table_name
where column glob '?xxxx'

or

select from table_name
where column glob '?xxxx?'

or

select from table_name
where column glob '????'

您可以使用 and 或 or 运算符来结合 n 个数量的条件。在这里,xxxx 可以是任何数字或字符串值。

 

2. 范例

下面一些范例演示了 带有 '*' 和 '?' 运算符的 glob 子句不同的地方:

语句描述
where salary glob '200*'查找以 200 开头的任意值
where salary glob '*200*'查找任意位置包含 200 的任意值
where salary glob '?00*'查找第二位和第三位为 00 的任意值
where salary glob '2??'查找以 2 开头,且长度至少为 3 个字符的任意值
where salary glob '*2'查找以 2 结尾的任意值
where salary glob '?2*3'查找第二位为 2,且以 3 结尾的任意值
where salary glob '2???3'查找长度为 5 位数,且以 2 开头以 3 结尾的任意值

让我们举一个实际的例子,假设 company 表有以下记录:

id          name        age         address     salary
----------  ----------  ----------  ----------  ----------
1           paul        32          california  20000.0
2           allen       25          texas       15000.0
3           teddy       23          norway      20000.0
4           mark        25          rich-mond   65000.0
5           david       27          texas       85000.0
6           kim         22          south-hall  45000.0
7           james       24          houston     10000.0

下面是一个范例,它显示 company 表中 age 以 2 开头的所有记录:

sqlite> select * from company where age  glob '2*';

这将产生以下结果:

id          name        age         address     salary
----------  ----------  ----------  ----------  ----------
2           allen       25          texas       15000.0
3           teddy       23          norway      20000.0
4           mark        25          rich-mond   65000.0
5           david       27          texas       85000.0
6           kim         22          south-hall  45000.0
7           james       24          houston     10000.0

下面是一个范例,它显示 company 表中 address 文本里包含一个连字符(-)的所有记录:

sqlite> select * from company where address  glob '*-*';

这将产生以下结果:

id          name        age         address     salary
----------  ----------  ----------  ----------  ----------
4           mark        25          rich-mond   65000.0
6           kim         22          south-hall  45000.0

下一节:sqlite limit 子句

sqlite教程

相关文章