Mysql内置函数全解析——Mysql初级(三)

一、前言:

在关系型数据库使用的过程中,我们总会对DB里面的数据做各种不同形式的转换,字符串处理等基本操作。本文将会比较系统的学习总结Mysql中的各种内置函数。这是一个系列的文章,感兴趣的小伙伴可以关注一下哦!

本文的行文思路是这样的,因为Mysql的内置函数主要分以下几个部分:

1、数学函数:这类函数只要用于处理数字。这类函数包括绝对值函数、正弦函数、余弦函数、获取随机数函数等。

2、字符串函数:这类函数主要用于处理字符串。其中包括字符串连接函数、字符串比较函数、将字符串的字母变成小写或大写字母的函数、获取子串的函数等。

3、日期和时间函数:这类函数主要用于处理日期和时间。其中包括取当前时间的函数、获取当前日期的函数、返回年份的函数、返回日期的函数等。

4、流程函数:这类函数主要用于在SQL语句中控制条件选择。其中包括IF语句、CASE语句、WHEN语句等。

5、系统信息函数:这类函数主要用于获取mysql数据库的系统信息。其中包括获取数据库名的函数、获取当前用户的函数、获取数据库版本的函数等。

6、加密函数:这类函数主要用于对字符串进行加密解密。其中包括字符串加密函数、字符串解密函数等。
其他函数:包括格式化函数、锁函数等。

本文会按照函数介绍以及例子解析的方式分析,请大家拭目以待吧。

 

系列文章思维导图

Mysql内置函数全解析——Mysql初级(三)_第1张图片


1、数学函数:

这类函数只要用于处理数字。这类函数包括绝对值函数、正弦函数、余弦函数、获取随机数函数等。

(1)、ABS(X):

返回X的就绝对值。

-- 1、数学函数ABS(X)
SELECT ABS(11) AS a,ABS(-12) AS b, ABS(-140.1) AS c;

(2)、CEIL(x),CEILING(x):

返回大于或等于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,因为向上取整的缘故。

(3)、FLOOR(x)  

 返回小于或等于x的最大整数(向下取整

-- FLOOR(x)    返回小于或等于x的最大整数(向下取整)
SELECT FLOOR(11.5) AS a, -- 11
FLOOR(-11.5) AS b ,-- -12
FLOOR(12.9) AS c -- 12

(4)、RAND()

返回0~1的随机数

-- RAND()  返回0~1的随机数
SELECT 
RAND() As a,
RAND() AS b,
RAND() AS c;

(5),RAND(x)

返回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;

Mysql内置函数全解析——Mysql初级(三)_第2张图片

(6)、 SIGN(x)

返回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;

(7)、PI()

返回圆周率。

-- PI()    返回圆周率
SELECT PI(); -- 保留6位数的圆周率

Mysql内置函数全解析——Mysql初级(三)_第3张图片

(8)、TRUNCATE(x,y)

返回数值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;

Mysql内置函数全解析——Mysql初级(三)_第4张图片

(9)、 ROUND(x)

返回离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

(10)、ROUND(x,y)

保留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

 

(11)、POW(x,y),POWER(x,y)

返回xy次方。

-- 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
;

(12)、SQRT(x)

返回x的平方根,PS,负数是没有平方根的。

-- SQRT(x) 返回x的平方根

SELECT
	SQRT(9) AS a,
	SQRT(32) As b,
	SQRT(11) AS c,
	SQRT(-12) AS d;

(13),EXP(x)

返回e的x次方。

-- EXP(x)  返回e的x次方
SELECT
	EXP(12) AS a,
	EXP(2) AS b,
	EXP(1) AS c ;

Mysql内置函数全解析——Mysql初级(三)_第5张图片

(14)、MOD(x,y)

返回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

 

(15)、 LOG(x)

返回自然对数(以e为底的对数)。

-- LOG(x)  返回自然对数(以e为底的对数)

SELECT
	LOG(10) AS a,
	LOG(11) AS b,
	LOG(13) AS c;

 

(16)、LOG10(x)

返回以10为底的对数。

-- LOG10(x)    返回以10为底的对数
SELECT 
LOG10(10) AS a,
LOG10(100) AS b,
LOG10(101) AS c

(17)、RADIANS(x)

将角度转换为弧度。

-- RADIANS(x)  讲角度转换为弧度
SELECT 
RADIANS(30) AS a,
RADIANS(60) AS b,
RADIANS(90) AS c;

(18)、DEGREES(x)

将弧度转换为角度。

-- DEGREES(x)  讲弧度转换为角度
SELECT 
DEGREES(0.5235987755982988) AS a,
DEGREES(1.0471975511965976) AS b,
DEGREES(1.5707963267948966) AS c;

 

(19)、SIN(x)

求正弦值。

-- SIN(x)  求正弦值
SELECT
	SIN(100) AS a,
	SIN(-120) AS b,
	SIN(10) AS c;

(20)、ASIN(x)

求反正弦值。

-- ASIN(x) 求反正弦值
SELECT
	ASIN(0.12) AS a,
	ASIN(0.2) AS b,
	ASIN(-0.12) AS c;

(21)、COS(x)

求余弦值

 

(22)、ACOS(x)

求反余弦值

 

(23)、TAN(x)

求正切值

 

(24)、ATAN(x),ATAN(x,y)

求反正切值

 

(25)、COT(x)

求余切值

2、字符串操作函数

这类函数主要用于处理字符串。其中包括字符串连接函数、字符串比较函数、将字符串的字母变成小写或大写字母的函数、获取子串的函数等。

(1),CHAR_LENGTH(s)

返回字符串s的【字符数】

-- CHAR_LENGTH(s) 返回字符串s的【字符数】
SELECT 
	CHAR_LENGTH('hello world');

 

(2),LENGTH(s)

返回字符串s的【长度】

 

(3),CONCAT(s1,s2,.....)

将字符串s1,s2等多个字符串合并为一个字符串

 

(4),CONCAT_WS(x,s1,s2,....)

同COUCAT(s1,s2,.....),但是每个字符串之间要加上x

 

(5),INSERT(s1,x,len,s2)

将字符串s2替换s1的x位置开始长度为len的字符串

 

(6),UPPER(s),UCASE(s)

将字符串s的所有字符都变成大写字母

 

(7),LOWER(s),LCASE(s)

讲字符串s的所有字符都变成小写字母

 

(8),LEFT(s,n)

返回字符串s的前n个字符

 

(9),RIGHT(s,n)

返回字符串s的后n个字符

 

(10),LPAD(s1,len,s2)

字符串s2来填充s1的开始处,使字符串长度达到len

 

(11),RPAD(s1,len,s2)

字符串s2来填充s1的结尾处,使字符串长度达到len

 

(12),LTRIM(s)

去掉字符串s开始处的空格

 

(13),RTRIM(s)

去掉字符串s结尾处的空格

 

(14),TRIM(s)

去掉字符串s开始处和结尾处的空格

 

(15),TRIM(s1 FROM s)

去掉字符串s中开始处和结尾处的字符串s1

 

(16),REPEAT(s,n)

将字符串s重复n次

 

(17),SPACE(n)

返回n个空格

 

(18),REPLACE(s,s1,s2)

用字符串s2代替字符串s中的字符串s1

 

(19),STRCMP(s1,s2)

比较字符串s1和s2(返回值-1,0,1)

 

(20),SUBSTRING(s,n,len)

获取从字符串s中的第n个位置开始长度为len的字符串

 

(21),MID(s,n,len)

同SUBSTRING(s,n,len)

 

(22),POSITION(s1 IN s)

从字符串s中获取s1的开始位置

 

(23),INSTR(s,s1)

从字符串s中获取s1的开始位置

 

(24),REVERSE(s)

将字符串s的顺序反过来

 

(25),ELT(n,s1,s2...)

返回第n个字符串,没有则返回NULL

 

(26),FIELD(s,s1,s2...)

返回第一个与字符串s匹配的字符串的位置

 

(27),FIND_IN_SET(s1,s2)

返回在字符串s2中与s1匹配的字符串的位置

 

3、时间,日期处理函数

这类函数主要用于处理日期和时间。其中包括取当前时间的函数、获取当前日期的函数、返回年份的函数、返回日期的函数等。

(1)、CURDATE(),CURRENT_DATE()

返回当前日期(yyyy-mm-dd)

-- CURDATE(),CURRENT_DATE()    返回当前日期(yyyy-mm-dd)
SELECT
CURDATE() AS a,CURRENT_DATE() AS b   -- 返回当前日期(yyyy-mm-dd)

(2)、CURTIME(),CURRENT_TIME()

返回当前时间(hh:mm:ss)

-- CURTIME(),CURRENT_TIME()    返回当前时间(hh:mm:ss)
SELECT
	CURTIME() AS a ,CURRENT_TIME() AS b; --   返回当前时间(hh:mm:ss)

Mysql内置函数全解析——Mysql初级(三)_第6张图片

(3)、NOW(),CURRENT_TIMESTAMP()

返回当前的完整时间。

-- NOW(),CURRENT_TIMESTAMP()
select NOW(),CURRENT_TIMESTAMP();

(4)、LOCALTIME(),SYSDATE()

返回本地时间。

-- LOCALTIME(),SYSDATE()
SELECT LOCALTIME(),SYSDATE();

 

(5)、LOCALTIMESTAMP()

(3),(4),(5)返回当前日期和时间(yyyy-mm-dd hh:mm:ss),这几个函数作用相同

 

(6)、UNIX_TIMESTAMP()

以UNIX时间戳的形式返回当前时间

 

(7)、UNIX_TIMESTAMP(d)

将时间d以UNIX时间戳的形式返回

 

(8)、FROM_UNIXTIME(d)

把UNIX时间戳的时间转换为普通格式的时间

 

(9)、UTC_DATE()

返回UTC(国际协调时间)日期

 

(10)、UTC_TIME()

返回UTC时间(Asia/Shanghai时区-8h)

 

(11)、MONTH(d)

返回日期d中的月份值,范围是1~12

 

12)、MONTHNAME(d)

返回日期d中的月份名称,如january

 

13)、DAYNAME(d)

返回日期d是星期几,如Monday

 

(14)、DAYOFWEEK(d)

返回日期d是星期几,1表示星期日,2表示星期2

 

15)、WEEKDAY(d)

返回日期d是星期几,0表示星期一,1表示星期2

 

(16)、WEEK(d)

计算日期d是本年的第几个星期,范围是0-53

 

(17)、WEEKOFYEAR(d)

计算日期d是本年的第几个星期,范围是1-53

 

18)、DAYOFYEAR(d)

计算日期d是本年的第几天

 

(19)、DAYOFMONTH(d)

计算日期d是本月的第几天

 

(20)、YEAR(d)

返回日期d中的年份值

 

21)、QUARTER(d)

返回日期d是第几季度,范围1-4

 

(22)、HOUR(t)

返回时间t中的小时值

 

(23)、MINUTE(t)

返回时间t中的分钟值

 

(24)、SECOND(t)

返回时间t中的秒钟值

 

25)、EXTRACT(type FROM d)

从日期d中获取指定的值,type指定返回的值,如YEAR,HOUR等

 

(26)、TIME_TO_SEC(t)

将时间t转换为秒,从00:00:00开始到t的秒数

 

(27)、SEC_TO_TIME(s)

将以秒为单位的时间s转换为时分秒的格式

 

(28)、TO_DAYS(d)

计算日期d到0000年1月1日的天数

 

(29)、FROM_DAYS(n)

计算从0000年1月1日开始n天后的日期

 

(30)、DATEDIFF(d1,d2)

计算日期d1到d2之间相隔的天数

 

(31)、ADDDATE(d,n)

计算开始日期d加上n天的日期

 

(32)、ADDDATE(d, INTERVAL expr type)

计算起始日期d加上一个时间段后的日期

 

(33)、SUBDATE(d,n)

计算起始日期d减去n天的日期

 

(34)、SUBDATE(d, INTERVAL expr type)

计算起始日期d减去一个时间段后的日期

 

(35)、ADDTIME(t,n)

计算起始时间t加上n秒的时间

 

(36)、SUBTIME(t,n)

计算起始时间t减去n秒的时间

 

(37)、DATE_FORMAT(d,f)

按照表达式f的要求显示日期d

 

(38)、TIME_FORMAT(t,f)

按照表达式f的要求显示时间t

 

(39)、GET_FORMAT(type,s)

根据字符串s获取type类型数据的显示格式

 

4、条件判断函数(流程函数)

这类函数主要用于在SQL语句中控制条件选择。其中包括IF语句、CASE语句、WHEN语句等。这类函数尤其在存储过程中使用的比较普遍。

(1)、【IF(expr,v1,v2)函数】

IF(expr,v1,v2)函数中,如果表达式expr成立,返回结果v1,否则,返回结果v2。

(2)、【CASE函数】

CASE WHEN expr1 THEN v1 [WHEN expr2 THEN v2...][ELSE vn] END

 

5、系统信息函数:

这类函数主要用于获取mysql数据库的系统信息。其中包括获取数据库名的函数、获取当前用户的函数、获取数据库版本的函数等。

(1)、VERSION()

返回数据库的版本号

 

(2)、CONNECTION_ID()

返回服务器的连接数,也就是到现在为止mysql服务的连接次数

 

(3)、DATABASE(),SCHEMA()

返回当前数据库名

 

(4)、USER()

返回当前用户的名称

 

(5)、CHARSET(str)

返回字符串str的字符集

 

(6)、COLLATION(str)

返回字符串str的字符排列方式

(7)、LAST_INSERT_ID()

返回最后生成的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')

 

6、加密解密函数

这类函数主要用于对字符串进行加密解密。其中包括字符串加密函数、字符串解密函数等。

(1)、PASSWORD(str)

对字符串str进行加密

 

(2)、MD5(str)

对字符串str进行加密

 

(3)、ENCODE(str,pswd_str)

使用字符串pswd_str来加密字符串str,加密结果是一个二进制数,必须使用BLOB类型来保持它

(4)、DECODE(crypt_str,pswd_str)

解密函数,使用字符串pswd_str来为crypt_str解密

 

7、其他函数:

包括格式化函数、锁函数等。

(1)、FORMAT(x,n) 格式化函数,

可以将数字x进行格式化,将x保留到小数点后n位,这个过程需要进行四舍五入。

 

(2)、ASCII(s)

返回字符串s的第一个字符的ASSCII码

 

(3)、BIN(x)

返回数字x的二进制编码

 

(4)、HEX(x)

返回数字x的十六进制编码

 

(5)、OCT(x)

返回数字x的八进制编码

 

6)、CONV(x,f1,f2)

将x从f1进制数变成f2进制数conv(100000,2,16)=20

 

(7)、INET_ATON(IP)

将IP地址转换为数字表示,IP值需要加上引号

 

(8)、INET_NTOA(n)

可以将数字n转换成IP的形式

 

(9)、GET_LOCT(name,time)

加锁函数,定义一个名称为name、持续时间长度为time秒的锁,如果锁定成功,返回1,如果尝试超时,返回0,如果

 

(10)、RELEASE_LOCK(name)

解除名称为name的锁,如果解锁成功,返回1,如果尝试超时,返回0,如果解锁失败,返回NULL。

 

(11)、IS_FREE_LOCK(name)

判断是否使用名为name的锁,如果使用,返回0,否则返回1

 

(12)、CONVERT(s USING cs)

将字符串s的字符集变成cs

(13)、CAST(x AS type),CONVERT(x,type)

这两个函数将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

 

 

你可能感兴趣的:(Mysql深入浅出,Mysql内置函数)