SQLite3数据库中的运算

本文将介绍SQLite3数据库中的基础运算,包括文本连接、算术运算、位运算、比较运算、逻辑运算等。

文本连接

两条竖线(||)为连接运算符,无论运算符两侧的数据是什么类型,运算结果都是其文本形式连接的结果。在SQLite3数据库,可以使用select语句显示运算结果,如下面的代码。

SQLite3
select 10 || 99;

执行代码会显示1099。可以使用如下代码检测运算结果的类型。

SQLite3
select typeof(10 || 99);

代码中使用typeof()函数检测数据的类型,本例显示为text,即文本类型。

算术运算

SQLite数据库中的算术运算包括:

  • 加法,使用+运算符。
  • 减法,使用-运算符。
  • 乘法,使用*运算符。
  • 除法,使用/运算符。如10/3得3,10.0/3得3.333333333333333(64位浮点数)。
  • 求余数,使用%运算符,取整数部分进行计算。

请注意,以上算术运算都需要两个运算数,其中,有一个运算数是浮点数时,运算结果为浮点数;如果两个运算数都是整数,运算结果为整数。

下面的代码演示了取余数运算符(%)的应用。

SQLite3
select 10.5%3.3;

执行代码会显示1.0。此运算中,实际计算的是10.0除以3.0的余数。

位运算

SQLite3数据库提供了整数的位运算,包括:

  • 按位与,使用&运算符,需要两个运算数,二进制位都是1时返回1,有一个为0返回0。
  • 按位或,使用|运算符,需要两个运算数,二进制位有一个为1返回1,都是0时返回0。
  • 按位取反,使用~运算符,只需要一个运算数,二进制位中1取反得0,0取返回得1。
  • 位左移,使用<<运算符。如a<<n表示a×2n。
  • 位右移,使用>>运算符。如a>>n表示a÷2n。

整数中,十进制1的4位二进制为0001,2为0010,3为0011,可以通过它们的位运算来观察计算结果。如下面的代码。

SQLite3
select 1&2, 1&3;

执行代码会显示0和1。其中,1&2计算0001&0010,结果为0;1&3计算0001&0011,结果为1。

下面的代码演示了位移运算。

SQLite3
select 32<<2, 32>>2;

执行代码会显示128和8,其中,32<<2计算32×22,结果为128;32>>2计算为32÷22,结果为8。

比较运算

设置数据查询条件时,比较运算是常用的运算方法,SQLite3中的比较运算有:

  • 等于,使用=或==运算符。
  • 不等于,使用!=或<>运算符。
  • 大于,使用>运算符。
  • 大于等于,使用>=运算符。
  • 小于,使用<运算符。
  • 小于等于,使用<=运算符。
  • 判断数据是否在一个元素集合中可以使用in运算符,如f2 in (0,1,2)表示f2字段数据是否是0、1、2其中的一个。
  • 文本匹配运算,包括like、glob、match和regexp运算符。其中,常见的是like运算符,用于匹配文本内容,匹配时不区分字母大小写,匹配内容可以使用下画线(_)匹配一个字符,使用百分号(%)匹配零或多个字符,如f1 like 'user%'可以匹配f1字段中以user开始的内容,包括user本身。

比较运算的结果为逻辑值,但在数据库中没有逻辑类型数据,当比较结果成立时会返回1,不成立时返回0,如下面的代码。

SQLite3
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运算符的应用。

SQLite3
select 'abc' like 'A%';

本例,'abc'以字母a开始,并且like运算符不区分字母大小写,匹配结果为1(true)。

下面的代码会使用glob运算符,其功能与like运算符相似,只是会区分字母大小写。

SQLite3
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)运算的运算规则。

truefalsenull
truetruefalsenull
falsefalsefalsefalse
nullnullfalsenull

其中,第一列和第一行为运算数,交叉点为运算结果。

下表是或运算(or)的运算规则。

truefalsenull
truetruetruetrue
falsetruefalsenull
nulltruenullnull

同样的,第一列和第一行为运算数,交叉点为运算结果。

取反运算(not)的运算规则相对简单,true取反为false,false取反为true,null取反依然是null。

下面的代码显示了基本的逻辑运算,请注意,true值显示为1,false值显示为0。

SQLite3
select 1 and 0, 1 or 0, not 1, null or 1;

执行代码会显示0、1、0、1。

后续文章中,在更新数据、删除数据和查询数据等操作时还会有更多运算相关的应用演示和讨论。