学习记录
MySQL
单行函数的使用,分类如下
- 数值函数
- 基本函数
- 角度与弧度互换函数
- 三角函数
- 指数与对数
- 进制间的转换
- 字符串函数
不同DBMS函数的差异
我们在使用 SQL 语言的时候,不是直接和这门语言打交道,而是通过它使用不同的数据库软件,即DBMS。
DBMS 之间的差异性很大,远大于同一个语言不同版本之间的差异
。实际上,只有很少的函数是被 DBMS 同时支持的。比如,大多数 DBMS 使用 ( || )或者(+) 来做拼接符,而在 MySQL 中的字符串拼接函数为concat( )。大部分 DBMS 会有自己特定的函数,这就意味着采用 SOL 函数的代码可移植性是很差的
,因此在使用函数的时候需要特别注意。
MySQL 提供了丰富的内置函数,这些函数使得数据的维护与管理更加方便,能够更好地提供数据的分析与统计功能,在一定程度上提高了开发人员进行数据分析与统计的效率。
MySQL提供的内置函数从实现的功能角度
可以分为数值函数、字符串函数、日期和时间函数、流程控制函数、加密与解密函数、获取 MySQL 信息函数、聚合函数等。这里,我将这些丰富的内置函数再分为两类: 单行函数
、聚合函数(或分组函数)
。
什么是
单行函数
?
- 操作数据对象
- 接受参数返回一个结果
只对一行进行变换
每行返回一个结果
- 可以嵌套
- 参数可以是一列或者一个值
1. 数值函数
1.1 基本函数
函数 | 用法 |
---|---|
ABS( X ) | 返回 X 的绝对值 |
SIGN( X ) | 返回 X 的符合, 正数返回 1,负数返回 -1,0 返回 0 |
PI( ) | 返回圆周率的值 |
CEIL( X ), CEILING( X ) | 返回大于或等于某个值的最小整数 |
FLOOR( X ) | 返回小于或等于某个值的最大整数 |
LEAST(e1, e2, e3...) | 返回列表中的最小值 |
GREATEST(e1, e2, e3...) | 返回列表中的最大值 |
MOD(x, y) | 返回 X 除以 Y 后的余数 |
RAND( ) | 返回 0 ~ 1 的随机值 |
RAND( X ) | 返回 0 ~ 1 的随机值,其中 X 的值用作种子值,相同 X 的值会产生相同的随机数 |
ROUND( X ) | 返回一个对 X 的值进行四舍五入后, 最接近于 X 的整数 |
ROUND( x, y ) | 返回一个对 X 的值进行四舍五入后最接近 X 的值,并保留到小数点后面 Y 位 |
TRUNCATE( x, y ) | 返回数字 X 截断 为 y 位小数的结果 |
SQRT( X ) | 返回 X 的平方根,当 X 为负数时,返回 NULL |
1.2 角度与弧度互换函数
函数 | 用法 |
---|---|
RADINAS( X ) | 将角度转化为弧度,其中参数 X 为角度值 |
DEGREES( X ) | 将弧度转化为角度,其中 X 为弧度值 |
1.3 三角函数
函数 | 用法 |
---|---|
SIN( X ) | 返回 X 的正弦值,其中参数 X 为弧度值 |
ASIN( X ) | 返回 X 的反正弦值,即获取正弦为 X 的值。如果 X 的值不在 -1 到 1 之间,则返回 NULL |
COS( X ) | 返回 X 的余弦值,其中参数 X 为弧度值 |
ACOS( X ) | 返回 X 的反余弦值,即获取余弦为 X 的值。如果 X 的值不在 -1 到 1 之间,则返回 NULL |
TAN( X ) | 返回 X 的正切值,其中参数 X 为弧度值 |
ATAN( X ) | 返回 X 的反正切值,即返回正切值为 X 的值 |
ATAN2( X ) | 返回两个参数的反正切值 |
COT( X ) | 返回 X 的余切值,其中参数 X 为弧度值 |
1.4 指数与对数
函数 | 用法 |
---|---|
POW(X,Y),POWER(X,Y) | 返回 X 的 Y 次方 |
EXP(X) | 返回 e 的 X 次方,其中 e 是一个常数,2.718281828459045 |
LOG10(X) | 返回以 10 为底的 X 的对数,当 X <= 0 时,返回的结果为 NULL |
LOG2(X) | 返回以 2 为底的 X 的对数,当X <= 0 时,返 NULL |
1.5 进制间的转换
函数 | 用法 |
---|---|
BIN(X) | 返回 X 的二进制编码 |
HEX(X) | 返回 X 的十六进制编码 |
OCT(X) | 返回 X 的八进制编码 |
CONV(X, f1, f2) | 返回 f1 进制数变成 f2 进制数 |
2. 字符串函数
函数 | 用法 |
---|---|
ASCII(S) | 返回字符串 S 中的第一个字符的 ASCI 码值 |
CHAR_LENGTH(S) | 返回字符串 S 的字符数。作用与 CHARACTER_LENGTH(S)相同 |
LENGTH(S) | 返回字符串 S 的字节数,和字符集有关 |
CONCAT(s1, s2, .......sn) | 连接 s1,s2.....sn 为一个字符串 |
CONCAT_WS(x, s1, s2, ....... sn) | 同 CONCAT(s1, s2....)函数,但是每个字符串之间要加上 x |
INSERT(str, idx, len, replacestr) | 将字符串 str 从第 idx 位置开始,len 个字符长的子串替换为字符串 replacestr |
REPLACE(str, a, b) | 用字符串 b 替换字符串 str 中所有出现的字符串 a |
UPPER(s) 或 UCASE(s) | 将字符串 s 的所有字母转成大写字母 |
LOWER(s)或LCASE(s) | 将字符串 s 的所有字母转成小写字母 |
LEFT(str, n) | 返回字符串 str 左边的 n 个字符 |
RIGHT(str, n) | 返回字符串 str 右边的 n 个字符 |
LPAD(str, len, pad) | 用字符串 pad 对 str 左边进行填充,直到 str 的长度为 len 个字符 |
RPAD(str ,len, pad) | 用字符串 pad 对 str 右边进行填充,直到 str 的长度为 len 个字符 |
LTRIM(s) | 去掉字符串 s 左侧的空格 |
RTRIM(s) | 去掉字符串 s 右侧的空格 |
TRIM(s) | 去掉字符串 s 开始与结尾的空格 |
TRIM(s1 FROM s) | 去掉字符串 s 开始与结尾的 s1 |
TRIM(LEADING s1 FROM s) | 去掉字符串 s 开始处的 s1 |
TRIM(TRAILING s1 FROM s) | 去掉字符串 s 结属处的 s1 |
REPEAT(str, n) | 返回 str 重复 n 次的结果 |
SPACE(n) | 返回 n 个空格 |
STRCMP(s1, s2) | 比较字符串 s1, s2 的 ASCII 码值的大小 |
SUBSTR(s, index, len) | 返回从字符串 s 的 index 位置其 len 个字符,作用与 SUBSTRING(s,n,len) MID(s,n,len)相同 |
LOCATE(substr, str) | 返回字符串 substr 在字符串 str 中首次出现的位置,作用于POSITION INSTR 相同。未找到,返回 0 |
ELT(m, s1, s2, ...sn) | 返回指定位置的字符串,如果 m=1,则返回 s1,如果 m=2,则返回 s2,如果 m=n,则返回 sn |
FIELD(s, s1, s2,...sn) | 返回字符串 s 在字符串列表中第一次出现的位置 |
FIND_IN_SET(s1, s2) | 返回字符串 s1 在字符串 s2 中出现的位置。其中,字符串 s2 是一个以逗号分隔的字符串 |
REVERSE(S) | 返回 s 反转后的字符串 |
NULLIF(value1,value2) | 比较两个字符串,如果 value1 与 value2 相等,则返回 NULL,否则返回 value1 |
注意:MySQL中,字符串的位置是从 1 开始的