sql 中也有函数,函数可以作用在 SELECT 的任何部分。
以下的函数只在 sqlite 中验证过,别的 DBMS 自行验证。
字符串操作函数
- LTRIM,RTRIM 与 TRIM:分别用于去掉字符串左边、右边以及左右两边的空格。
SELECT "["||TRIM(name)||"]","["||name||"]" FROM em;
将返回的结果使用 [] 包裹起来,很容易看出 TRIM 的作用。
- LOWER,UPPER:将字符串转换成小写或大写。
SELECT LOWER(test),UPPER(test) FROM em
WHERE UPPER(test) LIKE '%XXX%';
这也表明函数可以用于任何位置 —— 不但出现在查询列,还出现在 WHERE 子句中。
- LENGTH:返回字符串的长度。
SELECT LENGTH(test) FROM em;
-
substr(X,Y[,Z]):截取字符串 X 的子串,各参数含义如下:
-
X 截取的列名,Y 表示截取开始的位置,Z 指截取的长度。
-
字符串的下标从 1 开始,-1 表示字符串的最后一个字符。
-
如果 Z 省略,就是从 Y 开始直到字符串末尾
-
如果 Z 为正数,则从 Y 开始(含)往右数 Z 个字符或直到字符串末尾
-
若 Z 为负数,则从 Y 开始(不含)往左数 Z 的绝对值个字符。如:
-
SELECT area AS area,
SUBSTR(area,2,-1) , SUBSTR(area,-2),
SUBSTR(area,-3,-2), SUBSTR(area,2,2)
FROM animals
结果为
substr数学函数
ABS(), TAN() , SIN() , COS():数学运算函数。
统计函数
对某些行进行计算,并返回一个结果的函数。常用的有 COUNT, MIN, MAX, AVG, SUM
-
确定表中的行数( 或满足某个条件的行的行数 )—— COUNT函数
-
求某些行的和 —— SUM函数
-
求某列( 或是所有行或是满足某些条件的行 )的最大、最小、平均值 —— MAX,MIN,AVG函数。
SELECT AVG(size), COUNT(size), SUM(size), MAX(size), MIN(size)
FROM animals WHERE name LIKE "%O%";
其求取 name 中有字母 O 的所有行的 size 的平均值,行数,总和,最大值与最小值。
- 这些函数只能用于汇总,并不能用于 WHERE 判断 —— 因为它本身就是求取满足一定条件的行的一些值。
COUNT
-
COUNT(*):对表中的行的数目进行计数,不忽略 null 值。
-
COUNT(column):对某个具体列的行进行计数,忽略值为 null 的行。
select count(schoolId) from em
该语句就相当于统计 em 表中 schoolId 值不为 null 的行数。
MAX与MIN
返回指定列中的最大值与最小值,会忽略 NULL 。
SUM
返回指定列值之和。也可以用来合计计算值。
SELECT SUM(weight+size) FROM animals
SUM参数中是两列的计算值,并不是一个单独的列——也可以使用单独的列。
DISTINCT 与 ALL
DISTINCT 表示只汇总不同的值,ALL 表示汇总所有的值。其中 ALL 是默认值。
- 上述几个函数都可以在参数中传入 DISTINCT 或 ALL。
SELECT AVG(size), AVG(DISTINCT size) FROM animals
假设 size 值分别为 (2,10,30,40,5,2) ,前者的值是 14.83 = 89/6,后者是 17.4 = 87/5—— 因为有两个 2,DINTINCT会将其中一个2给排除。
-
COUNT 与 DISTINCT 连用时,只能用于 COUNT(column),不能用于 COUNT(*)
-
在技术上 DISTINCT 与 MAX/MIN 可以连用,但没有任何意义。
网友评论