在关系型数据库使用的过程中,我们总会对DB里面的数据做各种不同形式的转换,字符串处理等基本操作。本文将会比较系统的学习总结Mysql中的各种内置函数。这是一个系列的文章,感兴趣的小伙伴可以关注一下哦!
本文的行文思路是这样的,因为Mysql的内置函数主要分以下几个部分:
1、数学函数:这类函数只要用于处理数字。这类函数包括绝对值函数、正弦函数、余弦函数、获取随机数函数等。
2、字符串函数:这类函数主要用于处理字符串。其中包括字符串连接函数、字符串比较函数、将字符串的字母变成小写或大写字母的函数、获取子串的函数等。
3、日期和时间函数:这类函数主要用于处理日期和时间。其中包括取当前时间的函数、获取当前日期的函数、返回年份的函数、返回日期的函数等。
4、流程函数:这类函数主要用于在SQL语句中控制条件选择。其中包括IF语句、CASE语句、WHEN语句等。
5、系统信息函数:这类函数主要用于获取mysql数据库的系统信息。其中包括获取数据库名的函数、获取当前用户的函数、获取数据库版本的函数等。
6、加密函数:这类函数主要用于对字符串进行加密解密。其中包括字符串加密函数、字符串解密函数等。
其他函数:包括格式化函数、锁函数等。
本文会按照函数介绍以及例子解析的方式分析,请大家拭目以待吧。
系列文章思维导图
这类函数只要用于处理数字。这类函数包括绝对值函数、正弦函数、余弦函数、获取随机数函数等。
返回X的就绝对值。
-- 1、数学函数ABS(X)
SELECT ABS(11) AS a,ABS(-12) AS b, ABS(-140.1) AS c;
返回大于或等于x的最小整数(向上取整)。
-- CEIL(x),CEILING(x):返回大于或等于x的最小整数(向上取整)
SELECT CEIL(12.5) AS a,CEIL(-12.6) AS b, CEIL(12.4) AS c, CEILING(14.3) AS d,CEILING(15.6) AS e,CEILING(-13.6) AS f;
CEIL(x)函数是返回一个大于运算数的最小整数,和Mysql中的四舍五入是有区别的,在使用的过程中 千万不要混淆。CEILING(x)函数返回一个等于最大运算数X的最小整数。注意: 这两个函数都是向上取整的。例如当执行函数CEIL(12.6),CEIL(12.1)的时候他们都会返回13,因为向上取整的缘故。
返回小于或等于x的最大整数(向下取整)
-- FLOOR(x) 返回小于或等于x的最大整数(向下取整)
SELECT FLOOR(11.5) AS a, -- 11
FLOOR(-11.5) AS b ,-- -12
FLOOR(12.9) AS c -- 12
返回0~1的随机数
-- RAND() 返回0~1的随机数
SELECT
RAND() As a,
RAND() AS b,
RAND() AS c;
返回0~1的随机数,x值相同时返回的随机数相同(也就是运算数X是同一个数时,返会的随机数也会是相同的)。例如: RAND(1) = RAND(1)。以下会用例子来阐述这一点。
-- RAND(x) 返回0~1的随机数,x值相同时返回的随机数相同
SELECT
RAND(1) As a,
RAND(1) As a,
RAND(2) AS b,
RAND(3) AS c;
返回x的符号,x是负数、0、正数分别返回-1、0、1
-- SIGN(x) 返回x的符号,x是负数、0、正数分别返回-1、0、1
SELECT
SIGN(10) AS a,
SIGN(-10) AS b,
SIGN(0) AS c,
SIGN(-12.11) AS d;
返回圆周率。
-- PI() 返回圆周率
SELECT PI(); -- 保留6位数的圆周率
返回数值x保留到小数点后y位的值
-- TRUNCATE(x,y) 返回数值x保留到小数点后y位的值
SELECT
TRUNCATE(11.123456789,4) AS a,
TRUNCATE(12.123000233,9) As b,
TRUNCATE('1234.12345',5) AS c;
返回离x最近的整数(四舍五入)
-- ROUND(x) 返回离x最近的整数(四舍五入)
SELECT
ROUND(12.123) AS a, -- 12
ROUND(12.511) As b, -- 13
ROUND(11.6) AS c, -- 12
ROUND(-12.123) AS a1, -- 12
ROUND(-12.511) As b1, -- 13
ROUND(-11.6) AS c1; -- 12
保留x小数点后y位的值,但截断时要四舍五入
-- ROUND(x,y) 保留x小数点后y位的值,但截断时要四舍五入
SELECT
ROUND(12.123,2) AS a, -- 12.12
ROUND(12.515,2) As b, -- 12.52
ROUND(11.613,2) AS c, -- 11.61
ROUND(-12.123,2) AS a1, -- -12.12
ROUND(-12.511,2) As b1, -- -12.51
ROUND(-11.6,2) AS c1; -- -11.60
返回x的y次方。
-- POW(x,y),POWER(x,y) 返回x的y次方
SELECT
POW(2,3) AS a, -- 8
POW(2,4) AS b, -- 16
POW(2,5) AS c, -- 32
POWER(2,3) AS a, -- 8
POWER(2,4) AS b, -- 16
POWER(2,5) AS c -- 32
;
返回x的平方根,PS,负数是没有平方根的。
-- SQRT(x) 返回x的平方根
SELECT
SQRT(9) AS a,
SQRT(32) As b,
SQRT(11) AS c,
SQRT(-12) AS d;
返回e的x次方。
-- EXP(x) 返回e的x次方
SELECT
EXP(12) AS a,
EXP(2) AS b,
EXP(1) AS c ;
返回x 除以y以后的余数,也就是取余操作。
-- MOD(x,y) 返回x 除以y以后的余数
SELECT
MOD(12,5) AS a ,-- 2
MOD(12,6) AS b ,-- 0
MOD(12,12) AS c -- 0
返回自然对数(以e为底的对数)。
-- LOG(x) 返回自然对数(以e为底的对数)
SELECT
LOG(10) AS a,
LOG(11) AS b,
LOG(13) AS c;
返回以10为底的对数。
-- LOG10(x) 返回以10为底的对数
SELECT
LOG10(10) AS a,
LOG10(100) AS b,
LOG10(101) AS c
将角度转换为弧度。
-- RADIANS(x) 讲角度转换为弧度
SELECT
RADIANS(30) AS a,
RADIANS(60) AS b,
RADIANS(90) AS c;
将弧度转换为角度。
-- DEGREES(x) 讲弧度转换为角度
SELECT
DEGREES(0.5235987755982988) AS a,
DEGREES(1.0471975511965976) AS b,
DEGREES(1.5707963267948966) AS c;
求正弦值。
-- SIN(x) 求正弦值
SELECT
SIN(100) AS a,
SIN(-120) AS b,
SIN(10) AS c;
求反正弦值。
-- ASIN(x) 求反正弦值
SELECT
ASIN(0.12) AS a,
ASIN(0.2) AS b,
ASIN(-0.12) AS c;
求余弦值
求反余弦值
求正切值
求反正切值
求余切值
这类函数主要用于处理字符串。其中包括字符串连接函数、字符串比较函数、将字符串的字母变成小写或大写字母的函数、获取子串的函数等。
返回字符串s的【字符数】
-- CHAR_LENGTH(s) 返回字符串s的【字符数】
SELECT
CHAR_LENGTH('hello world');
返回字符串s的【长度】
将字符串s1,s2等多个字符串合并为一个字符串
同COUCAT(s1,s2,.....),但是每个字符串之间要加上x
将字符串s2替换s1的x位置开始长度为len的字符串
将字符串s的所有字符都变成大写字母
讲字符串s的所有字符都变成小写字母
返回字符串s的前n个字符
返回字符串s的后n个字符
字符串s2来填充s1的开始处,使字符串长度达到len
字符串s2来填充s1的结尾处,使字符串长度达到len
去掉字符串s开始处的空格
去掉字符串s结尾处的空格
去掉字符串s开始处和结尾处的空格
去掉字符串s中开始处和结尾处的字符串s1
将字符串s重复n次
返回n个空格
用字符串s2代替字符串s中的字符串s1
比较字符串s1和s2(返回值-1,0,1)
获取从字符串s中的第n个位置开始长度为len的字符串
同SUBSTRING(s,n,len)
从字符串s中获取s1的开始位置
从字符串s中获取s1的开始位置
将字符串s的顺序反过来
返回第n个字符串,没有则返回NULL
返回第一个与字符串s匹配的字符串的位置
返回在字符串s2中与s1匹配的字符串的位置
这类函数主要用于处理日期和时间。其中包括取当前时间的函数、获取当前日期的函数、返回年份的函数、返回日期的函数等。
返回当前日期(yyyy-mm-dd)
-- CURDATE(),CURRENT_DATE() 返回当前日期(yyyy-mm-dd)
SELECT
CURDATE() AS a,CURRENT_DATE() AS b -- 返回当前日期(yyyy-mm-dd)
返回当前时间(hh:mm:ss)
-- CURTIME(),CURRENT_TIME() 返回当前时间(hh:mm:ss)
SELECT
CURTIME() AS a ,CURRENT_TIME() AS b; -- 返回当前时间(hh:mm:ss)
返回当前的完整时间。
-- NOW(),CURRENT_TIMESTAMP()
select NOW(),CURRENT_TIMESTAMP();
返回本地时间。
-- LOCALTIME(),SYSDATE()
SELECT LOCALTIME(),SYSDATE();
(3),(4),(5)返回当前日期和时间(yyyy-mm-dd hh:mm:ss),这几个函数作用相同
以UNIX时间戳的形式返回当前时间
将时间d以UNIX时间戳的形式返回
把UNIX时间戳的时间转换为普通格式的时间
返回UTC(国际协调时间)日期
返回UTC时间(Asia/Shanghai时区-8h)
返回日期d中的月份值,范围是1~12
返回日期d中的月份名称,如january
返回日期d是星期几,如Monday
返回日期d是星期几,1表示星期日,2表示星期2
返回日期d是星期几,0表示星期一,1表示星期2
计算日期d是本年的第几个星期,范围是0-53
计算日期d是本年的第几个星期,范围是1-53
计算日期d是本年的第几天
计算日期d是本月的第几天
返回日期d中的年份值
返回日期d是第几季度,范围1-4
返回时间t中的小时值
返回时间t中的分钟值
返回时间t中的秒钟值
从日期d中获取指定的值,type指定返回的值,如YEAR,HOUR等
将时间t转换为秒,从00:00:00开始到t的秒数
将以秒为单位的时间s转换为时分秒的格式
计算日期d到0000年1月1日的天数
计算从0000年1月1日开始n天后的日期
计算日期d1到d2之间相隔的天数
计算开始日期d加上n天的日期
计算起始日期d加上一个时间段后的日期
计算起始日期d减去n天的日期
计算起始日期d减去一个时间段后的日期
计算起始时间t加上n秒的时间
计算起始时间t减去n秒的时间
按照表达式f的要求显示日期d
按照表达式f的要求显示时间t
根据字符串s获取type类型数据的显示格式
这类函数主要用于在SQL语句中控制条件选择。其中包括IF语句、CASE语句、WHEN语句等。这类函数尤其在存储过程中使用的比较普遍。
IF(expr,v1,v2)函数中,如果表达式expr成立,返回结果v1,否则,返回结果v2。
CASE WHEN expr1 THEN v1 [WHEN expr2 THEN v2...][ELSE vn] END
这类函数主要用于获取mysql数据库的系统信息。其中包括获取数据库名的函数、获取当前用户的函数、获取数据库版本的函数等。
返回数据库的版本号
返回服务器的连接数,也就是到现在为止mysql服务的连接次数
返回当前数据库名
返回当前用户的名称
返回字符串str的字符集
返回字符串str的字符排列方式
返回最后生成的auto_increment值
--
-- VERSION() 返回数据库的版本号
-- CONNECTION_ID() 返回服务器的连接数,也就是到现在为止mysql服务的连接次数
-- DATABASE(),SCHEMA() 返回当前数据库名
-- USER() 返回当前用户的名称
-- CHARSET(str) 返回字符串str的字符集
-- COLLATION(str) 返回字符串str的字符排列方式
-- LAST_INSERT_ID() 返回最后生成的auto_increment值
SELECT
VERSION() AS b,
CONNECTION_ID() AS a,
DATABASE(),SCHEMA(),
USER(),
CHARSET('str'),
COLLATION('123')
这类函数主要用于对字符串进行加密解密。其中包括字符串加密函数、字符串解密函数等。
对字符串str进行加密
对字符串str进行加密
使用字符串pswd_str来加密字符串str,加密结果是一个二进制数,必须使用BLOB类型来保持它
解密函数,使用字符串pswd_str来为crypt_str解密
包括格式化函数、锁函数等。
可以将数字x进行格式化,将x保留到小数点后n位,这个过程需要进行四舍五入。
返回字符串s的第一个字符的ASSCII码
返回数字x的二进制编码
返回数字x的十六进制编码
返回数字x的八进制编码
(6)、CONV(x,f1,f2)
将x从f1进制数变成f2进制数conv(100000,2,16)=20
将IP地址转换为数字表示,IP值需要加上引号
可以将数字n转换成IP的形式
加锁函数,定义一个名称为name、持续时间长度为time秒的锁,如果锁定成功,返回1,如果尝试超时,返回0,如果
解除名称为name的锁,如果解锁成功,返回1,如果尝试超时,返回0,如果解锁失败,返回NULL。
判断是否使用名为name的锁,如果使用,返回0,否则返回1
将字符串s的字符集变成cs
这两个函数将x变成type类型,这两个函数只对BINARY,CHAR,DATE,DATETIME,TIME,SIGNED INTEGER,UNSIGNED INTEGER这些类型起作用,但这两种方法只是改变了输出值得数据类型,并没有改变表中字段的类型。
PS: 有兴趣的小伙伴可以看看Mysql的官方文档关于内置函数的描述。https://dev.mysql.com/doc/refman/5.7/en/func-op-summary-ref.html