本文将介绍SQLite3数据库中的基础运算,包括文本连接、算术运算、位运算、比较运算、逻辑运算等。
两条竖线(||)为连接运算符,无论运算符两侧的数据是什么类型,运算结果都是其文本形式连接的结果。在SQLite3数据库,可以使用select语句显示运算结果,如下面的代码。
select 10 || 99;
执行代码会显示1099。可以使用如下代码检测运算结果的类型。
select typeof(10 || 99);
代码中使用typeof()函数检测数据的类型,本例显示为text,即文本类型。
SQLite数据库中的算术运算包括:
请注意,以上算术运算都需要两个运算数,其中,有一个运算数是浮点数时,运算结果为浮点数;如果两个运算数都是整数,运算结果为整数。
下面的代码演示了取余数运算符(%)的应用。
select 10.5%3.3;
执行代码会显示1.0。此运算中,实际计算的是10.0除以3.0的余数。
SQLite3数据库提供了整数的位运算,包括:
整数中,十进制1的4位二进制为0001,2为0010,3为0011,可以通过它们的位运算来观察计算结果。如下面的代码。
select 1&2, 1&3;
执行代码会显示0和1。其中,1&2计算0001&0010,结果为0;1&3计算0001&0011,结果为1。
下面的代码演示了位移运算。
select 32<<2, 32>>2;
执行代码会显示128和8,其中,32<<2计算32×22,结果为128;32>>2计算为32÷22,结果为8。
设置数据查询条件时,比较运算是常用的运算方法,SQLite3中的比较运算有:
比较运算的结果为逻辑值,但在数据库中没有逻辑类型数据,当比较结果成立时会返回1,不成立时返回0,如下面的代码。
select 1=1,1=2,1=2=0;
执行代码会显示1、0、1。其中,1=1成立,显示为1;1=2不成立,显示为0;1=2=0中,首先计算1=2,结果为0,然后计算0=0,结果成立,显示为1。
下面的代码演示了like运算符的应用。
select 'abc' like 'A%';
本例,'abc'以字母a开始,并且like运算符不区分字母大小写,匹配结果为1(true)。
下面的代码会使用glob运算符,其功能与like运算符相似,只是会区分字母大小写。
select 'abc' glob 'A%';
执行代码会显示0(false)。
关于文本和正则表达式的应用,在后续文章中还会详细介绍。
此外,between...and可以指定数据范围,如f5 between 18 and 60表示f5字段的值是否在18到60之间。如果数据是可排序的,都可以使用between...and判断范围,如f1 between 'user01' and 'user03'可以指定f1字段内容在'user01'到'user03'之间。
判断空值(null)时应使用is关键字,如f3 is null表示f3字段数据为空,而f3 is not null表示f3字段数据不为空。
和大多数环境中的逻辑运算不同,在SQLite3数据库中的逻辑运算为三态运算,运算数包括真值(true)、假值(false)和空值(null);逻辑运算包括与(and)运算、或(or)运算和取反(not)运算。
下表是与(and)运算的运算规则。
其中,第一列和第一行为运算数,交叉点为运算结果。
下表是或运算(or)的运算规则。
同样的,第一列和第一行为运算数,交叉点为运算结果。
取反运算(not)的运算规则相对简单,true取反为false,false取反为true,null取反依然是null。
下面的代码显示了基本的逻辑运算,请注意,true值显示为1,false值显示为0。
select 1 and 0, 1 or 0, not 1, null or 1;
执行代码会显示0、1、0、1。
后续文章中,在更新数据、删除数据和查询数据等操作时还会有更多运算相关的应用演示和讨论。