八MySQL 常用函数汇总
Posted Amo Xiang
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了八MySQL 常用函数汇总相关的知识,希望对你有一定的参考价值。
文章目录
- 一、函数
- 二、数学函数
- 三、字符串函数
- 3.1 计算字符串字符数的函数和字符串长度的函数
- 3.2 合并字符串函数CONCAT(s1,s2,…)、CONCAT_WS(x,s1,s2,…)
- 3.3 替换字符串的函数INSERT(s1,x,len,s2)
- 3.4 字母大小写转换函数
- 3.5 获取指定长度的字符串的函数LEFT(s,n)和RIGHT(s,n)
- 3.6 填充字符串的函数LPAD(s1,len,s2)和RPAD(s1,len,s2)
- 3.7 删除空格的函数LTRIM(s)、RTRIM(s)和TRIM(s)
- 3.8 删除指定字符串的函数TRIM(s1 FROM s)
- 3.9 重复生成字符串的函数REPEAT(s,n)
- 3.10 空格函数SPACE(n)和替换函数REPLACE(s,s1,s2)
- 3.11 比较字符串大小的函数STRCMP(s1,s2)
- 3.12 获取子串的函数SUBSTRING(s,n,len)和MID(s,n,len)
- 3.13 匹配子串开始位置的函数
- 3.14 字符串逆序的函数REVERSE(s)
- 3.15 返回指定位置的字符串的函数
- 3.16 返回指定字符串位置的函数FIELD(s,s1,s2,…,sn)
- 3.17 返回子串位置的函数FIND_IN_SET(s1,s2)
- 3.18 选取字符串的函数MAKE_SET(x,s1,s2,…,sn)
- 四、日期和时间函数
- 4.1 获取当前日期的函数和获取当前时间的函数
- 4.2 获取当前日期和时间的函数
- 4.3 UNIX时间戳函数
- 4.4 返回UTC日期的函数和返回UTC时间的函数
- 4.5 获取月份的函数MONTH(date)和MONTHNAME(date)
- 4.6 获取星期的函数DAYNAME(d)、DAYOFWEEK(d)和WEEKDAY(d)
- 4.7 获取星期数的函数WEEK(d)和WEEKOFYEAR(d)
- 4.8 获取天数的函数DAYOFYEAR(d)和DAYOFMONTH(d)
- 4.9 获取年份、季度、小时、分钟和秒钟的函数
- 4.10 获取日期的指定值的函数EXTRACT(type FROM date)
- 4.11 时间和秒钟转换的函数
- 4.12 计算日期和时间的函数
- 4.13 将日期和时间格式化的函数
mysql 提供了众多功能强大、方便易用的函数。使用这些函数,可以极大地提高用户对数据库的管理效率。MySQL 中的函数包括数学函数、字符串函数、日期和时间函数、条件判断函数、系统信息函数和加密函数等函数。本文将介绍 MySQL 中这些函数的功能和用法。
前置知识:
一、数据库开发与实战专栏导学及数据库基础概念入门
二、MySQL 介绍及 MySQL 安装与配置
三、MySQL 数据库的基本操作
四、MySQL 存储引擎及数据类型
五、数据导入与基本的 SELECT 语句
六、MySQL 数据库练习题1(包含前5章练习题目及答案)
七、MySQL 多表查询详解(附练习题及答案----超详细)
一、函数
1.1 函数简介
函数在计算机语言的使用中贯穿始终,函数的作用是什么呢?它可以把我们经常使用的代码封装起来,需要的时候直接调用即可。这样既 提高了代码效率
,又 提高了可维护性
。在 SQL 中我们也可以使用函数对检索出来的数据进行函数操作,使用这些函数,数据库功能可以变得更加强大,可以更加灵活地满足不同用户的需求,可以极大地 提高用户对数据库的管理效率
。
从函数定义的角度出发,我们可以将函数分成 内置函数
和 自定义函数
。在 SQL 语言中,同样也包括了内置函数和自定义函数。内置函数是系统内置的通用函数,而自定义函数是我们根据自己的需要编写的,本文讲解的是 SQL 的内置函数。MySQL 提供了丰富的内置函数,各类函数从功能方面主要分为 数学函数、字符串函数、日期和时间函数、条件判断函数、系统信息函数和加密函数 等函数。本文将分类介绍不同函数的使用方法。
1.2 不同DBMS函数的差异
我们在使用 SQL 语言的时候,不是直接和这门语言打交道,而是通过它使用不同的数据库软件,即 DBMS。DBMS 之间的差异性很大,远大于同一个语言不同版本之间的差异。实际上,只有很少的函数是被 DBMS 同时支持的。比如,大多数 DBMS 使用 (||)
或者 (+)
来做拼接符,而在 MySQL 中的字符串拼接函数为 concat()
。大部分 DBMS 会有自己特定的函数,这就意味着采用 SQL 函数的代码可移植性是很差的,因此在使用函数的时候需要特别注意。
二、数学函数
数学函数主要用来处理数值数据,数学函数主要有绝对值函数、三角函数(包括正弦函数、余弦函数、正切函数、余切函数等)、对数函数、随机数函数等。在产生错误时,数学函数将会返回空值 NULL。本小节将介绍各种数学函数的作用和用法。
2.1 绝对值函数ABS(x)和返回圆周率的函数PI()
ABS(X) 返回 X 的绝对值。【示例1】求2、-3.3 和 -33 的绝对值,输入语句如下:
mysql> SELECT ABS(2), ABS(-3.3), ABS(-33);
+--------+-----------+----------+
| ABS(2) | ABS(-3.3) | ABS(-33) |
+--------+-----------+----------+
| 2 | 3.3 | 33 |
+--------+-----------+----------+
1 row in set (0.00 sec)
#正数的绝对值为其本身,2的绝对值为2。负数的绝对值为其相反数,-3.3的绝对值为3.3 -33的绝对值为33。
PI()返回圆周率 π
的值,默认显示小数位数是6位。【示例2】返回圆周率值,输入语句如下:
mysql> SELECT PI();
+----------+
| PI() |
+----------+
| 3.141593 |
+----------+
1 row in set (0.00 sec)
mysql>
2.2 平方根函数SQRT(x)和求余函数MOD(x,y)
SQRT(x) 返回非负数x的二次平方根。 【示例3】求9、40和-49的二次平方根,输入语句如下:
#负数没有平方根,因此-49的平方根返回的结果为NULL。
mysql> SELECT SQRT(9), SQRT(40), SQRT(-49);
+---------+-------------------+-----------+
| SQRT(9) | SQRT(40) | SQRT(-49) |
+---------+-------------------+-----------+
| 3 | 6.324555320336759 | NULL |
+---------+-------------------+-----------+
1 row in set (0.00 sec)
MOD(x,y)
返回 x
被 y
除后的余数,MOD()
对于带有小数部分的数值也起作用,它返回除法运算后的精确余数。 【示例4】对(31,8)、(234, 10)、(45.5,6)进行求余运算,输入语句如下:
mysql> SELECT MOD(31,8),MOD(234, 10),MOD(45.5,6);
+-----------+--------------+-------------+
| MOD(31,8) | MOD(234, 10) | MOD(45.5,6) |
+-----------+--------------+-------------+
| 7 | 4 | 3.5 |
+-----------+--------------+-------------+
1 row in set (0.00 sec)
2.3 获取整数的函数CEIL(x)、CEILING(x)和FLOOR(x)
CEIL(x)
和 CEILING(x)
的意义相同,返回不小于 x
的最小整数值,返回值转化为一个 BIGINT
。 【示例5】使用 CEILING 函数返回最小整数,输入语句如下:
mysql> SELECT CEIL(-3.35),CEILING(3.35);
+-------------+---------------+
| CEIL(-3.35) | CEILING(3.35) |
+-------------+---------------+
| -3 | 4 |
+-------------+---------------+
1 row in set (0.00 sec)
#-3.35为负数,不小于-3.35的最小整数为-3,因此返回值为-3;不小于3.35的最小整数为4,因此返回值为4。
FLOOR(x)
返回不大于 x
的最大整数值,返回值转化为一个 BIGINT
。【示例6】使用FLOOR函数返回最大整数,输入语句如下:
mysql> SELECT FLOOR(-3.35), FLOOR(3.35);
+--------------+-------------+
| FLOOR(-3.35) | FLOOR(3.35) |
+--------------+-------------+
| -4 | 3 |
+--------------+-------------+
1 row in set (0.00 sec)
2.4 获取随机数的函数RAND()和RAND(x)
RAND(x)
返回一个随机浮点值v,范围在0到1之间 (0 ≤ v ≤ 1.0)
。若已指定一个整数参数x,则它被用作种子值,用来产生重复序列。 【示例7】使用RAND()函数产生随机数,输入语句如下:
#可以看到,不带参数的RAND()每次产生的随机数值是不同的。
mysql> SELECT RAND(),RAND(),RAND();
+--------------------+---------------------+--------------------+
| RAND() | RAND() | RAND() |
+--------------------+---------------------+--------------------+
| 0.7769518548408075 | 0.44221097178963104 | 0.8801993251593777 |
+--------------------+---------------------+--------------------+
1 row in set (0.00 sec)
【示例8】使用RAND(x)函数产生随机数,输入语句如下:
mysql> SELECT RAND(10),RAND(10),RAND(11);
+--------------------+--------------------+-------------------+
| RAND(10) | RAND(10) | RAND(11) |
+--------------------+--------------------+-------------------+
| 0.6570515219653505 | 0.6570515219653505 | 0.907234631392392 |
+--------------------+--------------------+-------------------+
1 row in set (0.00 sec)
可以看到,当 RAND(x)
的参数相同时,将产生相同的随机数,不同的 x
产生的随机数值不同。
2.5 函数ROUND(x)、ROUND(x,y)和TRUNCATE(x,y)
ROUND(x)
返回最接近于参数 x
的整数,对 x
值进行四舍五入。【示例9】使用ROUND(x)函数对操作数进行四舍五入,输入语句如下:
mysql> SELECT ROUND(-1.14),ROUND(-1.67), ROUND(1.14),ROUND(1.66);
+--------------+--------------+-------------+-------------+
| ROUND(-1.14) | ROUND(-1.67) | ROUND(1.14) | ROUND(1.66) |
+--------------+--------------+-------------+-------------+
| -1 | -2 | 1 | 2 |
+--------------+--------------+-------------+-------------+
1 row in set (0.00 sec)
可以看到,四舍五入处理之后,只保留了各个值的整数部分。ROUND(x,y)
返回最接近于参数 x
的数,其值保留到小数点后面 y
位,若 y
为负值,则将保留 x
值到小数点左边 y
位。 【示例10】使用ROUND(x,y)函数对操作数x进行四舍五入操作,结果保留小数点后面y位,输入语句如下:
mysql> SELECT ROUND(1.38, 1), ROUND(1.38, 0), ROUND(232.38, -1), ROUND(232.38,-2);
+----------------+----------------+-------------------+------------------+
| ROUND(1.38, 1) | ROUND(1.38, 0) | ROUND(232.38, -1) | ROUND(232.38,-2) |
+----------------+----------------+-------------------+------------------+
| 1.4 | 1 | 230 | 200 |
+----------------+----------------+-------------------+------------------+
1 row in set (0.00 sec)
ROUND(1.38, 1) 保留小数点后面1位,四舍五入的结果为1.4;ROUND(1.38, 0) 保留小数点后面0位,即返回四舍五入后的整数值;ROUND(23.38, -1) 和 ROUND (232.38,-2) 分别保留小数点左边1位和2位。
提示:y值为负数时,保留的小数点左边的相应位数直接保存为0,不进行四舍五入。
TRUNCATE(x,y)
返回被舍去至小数点后 y
位的数字 x
。若 y
的值为 0,则结果不带有小数点或不带有小数部分。若 y
设为负数,则截去(归零) x
小数点左起第 y
位开始后面所有低位的值。 【示例11】使用TRUNCATE(x,y)函数对操作数进行截取操作,结果保留小数点后面指定y位,输入语句如下:
mysql> SELECT TRUNCATE(1.31,1), TRUNCATE(1.99,1), TRUNCATE(1.99,0), TRUNCATE(19.99,-1);
+------------------+------------------+------------------+--------------------+
| TRUNCATE(1.31,1) | TRUNCATE(1.99,1) | TRUNCATE(1.99,0) | TRUNCATE(19.99,-1) |
+------------------+------------------+------------------+--------------------+
| 1.3 | 1.9 | 1 | 10 |
+------------------+------------------+------------------+--------------------+
1 row in set (0.00 sec)
TRUNCATE(1.31,1) 和 TRUNCATE(1.99,1) 都保留小数点后1位数字,返回值分别为 1.3和1.9;TRUNCATE(1.99,0) 返回整数部分值1;TRUNCATE(19.99,-1) 截去小数点左边第1位后面的值,并将整数部分的1位数字设置0,结果为10。
提示:ROUND(x,y)函数在截取值的时候会四舍五入,而TRUNCATE (x,y)直接截取值,并不进行四舍五入。
2.6 符号函数SIGN(x)
SIGN(x)
返回参数的符号,x
的值分别为负数、零或正数时,返回结果依次为 -1、0或1。 【示例12】使用SIGN函数返回参数的符号,输入语句如下:
#SIGN(-21)返回-1;SIGN(0)返回0;SIGN(21)返回1。
mysql> SELECT SIGN(-21),SIGN(0), SIGN(21);
+-----------+---------+----------+
| SIGN(-21) | SIGN(0) | SIGN(21) |
+-----------+---------+----------+
| -1 | 0 | 1 |
+-----------+---------+----------+
1 row in set (0.00 sec)
2.7 幂运算函数POW(x,y)、POWER(x,y)和EXP(x)
POW(x,y)
或者 POWER(x,y)
函数返回 x
的 y
次方(乘方) 的结果值。 【示例13】使用POW和POWER函数进行乘方运算,输入语句如下:
#可以看到,POW和POWER的结果是相同的,POW(2,2)和POWER(2,2)返回2的2次方,结果都是4
# POW(2,-2)和POWER(2,-2)都返回2的-2次方,结果为4的倒数,即0.25。
mysql> SELECT POW(2,2), POWER(2,2),POW(2,-2), POWER(2,-2);
+----------+------------+-----------+-------------+
| POW(2,2) | POWER(2,2) | POW(2,-2) | POWER(2,-2) |
+----------+------------+-----------+-------------+
| 4 | 4 | 0.25 | 0.25 |
+----------+------------+-----------+-------------+
1 row in set (0.00 sec)
EXP(x)
返回 e(数学中e的值约为2.7182818284)
的 x
乘方后的值。 【示例14】使用EXP函数计算e的乘方,输入语句如下:
mysql> SELECT EXP(3),EXP(-3),EXP(0);
+--------------------+----------------------+--------+
| EXP(3) | EXP(-3) | EXP(0) |
+--------------------+----------------------+--------+
| 20.085536923187668 | 0.049787068367863944 | 1 |
+--------------------+----------------------+--------+
1 row in set (0.00 sec)
2.8 对数运算函数LOG(x)和LOG10(x)
LOG(x)
返回 x
的自然对数,x
相对于基数 e
的对数。 【示例15】使用LOG(x)函数计算自然对数,输入语句如下:
mysql> SELECT LOG(3), LOG(-3);
+--------------------+---------+
| LOG(3) | LOG(-3) |
+--------------------+---------+
| 1.0986122886681098 | NULL |
+--------------------+---------+
1 row in set, 1 warning (0.00 sec)
#对数定义域不能为负数,因此LOG(-3)返回结果为NULL。
LOG10(x)
返回 x
的基数为 10
的对数。 【示例16】使用LOG10计算以10为基数的对数,输入语句如下:
mysql> SELECT LOG10(2), LOG10(100), LOG10(-100);
+--------------------+------------+-------------+
| LOG10(2) | LOG10(100) | LOG10(-100) |
+--------------------+------------+-------------+
| 0.3010299956639812 | 2 | NULL |
+--------------------+------------+-------------+
1 row in set, 1 warning (0.00 sec)
2.9 其他数学函数(不怎么常用)
1、RADIANS(x)
将参数 x
由角度转化为弧度。
mysql> SELECT RADIANS(90),RADIANS(180);
+--------------------+-------------------+
| RADIANS(90) | RADIANS(180) |
+--------------------+-------------------+
| 1.5707963267948966 | 3.141592653589793 |
+--------------------+-------------------+
1 row in set (0.00 sec)
2、DEGREES(x)
将参数 x
由弧度转化为角度。
mysql> SELECT DEGREES(PI()), DEGREES(PI() / 2);
+---------------+-------------------+
| DEGREES(PI()) | DEGREES(PI() / 2) |
+---------------+-------------------+
| 180 | 90 |
+---------------+-------------------+
1 row in set (0.00 sec)
3、SIN(x)
返回 x
正弦,其中 x
为弧度值。
mysql> SELECT SIN(1), ROUND(SIN(PI()));
+--------------------+------------------+
| SIN(1) | ROUND(SIN(PI())) |
+--------------------+------------------+
| 0.8414709848078965 | 0 |
+--------------------+------------------+
1 row in set (0.00 sec)
4、ASIN(x)
返回 x
的反正弦,即正弦为 x
的值。若 x
不在 -1
到 1
的范围之内,则返回 NULL
。
mysql> SELECT ASIN(0.8414709848078965), ASIN(3);
+--------------------------+---------+
| ASIN(0.8414709848078965) | ASIN(3) |
+--------------------------+---------+
| 1 | NULL |
+--------------------------+---------+
1 row in set (0.00 sec)
5、COS(x)
返回 x
的余弦,其中 x
为弧度值。
mysql> SELECT COS(0),COS(PI()),COS(1);
+--------+-----------+--------------------+
| COS(0) | COS(PI()) | COS(1) |
+--------+-----------+--------------------+
| 1 | -1 | 0.5403023058681398 |
+--------+-----------+--------------------+
1 row in set (0.00 sec)
6、ACOS(x)
返回 x
的反余弦,即余弦是 x
的值。若 x
不在 -1~1
的范围之内,则返回 NULL
。
mysql> SELECT ACOS(1),ACOS(0), ROUND(ACOS(0.5403023058681398))Mysql中常用的函数汇总