MYSQL常用函数总结

Posted 黄河大道东

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了MYSQL常用函数总结相关的知识,希望对你有一定的参考价值。

一、数学函数

数学函数主要用于处理数字,包括整型、浮点数等。

计算绝对值

SELECT ABS(-1) AS \'求绝对值\';

小数取整

SELECT
	CEIL( 1.5 ) AS \'向上取整1\',
	CEILING( 1.5 ) AS \'向上取整2\',
	FLOOR( 1.5 ) AS \'向下取整\';

数字精度处理

SELECT
    ROUND(1.23456) AS \'最近整数\',
	TRUNCATE(1.23456, 3) AS \'保留3位不舍入\',
    ROUND(1.23456, 3) AS \'保留3位舍入\',
    FORMAT(1.23456,3) AS \'保留3位舍入\'

随机数(0~1)

SELECT
    RAND() ,
    RAND() AS \'每次随机\',
    RAND(10),
    RAND(10) AS \'根据随机种子随机\'

计算数字符号

SELECT
    SIGN(0) AS \'零值\',
    SIGN(-10) AS \'负数\',
    SIGN(10) AS \'正数\';

获取圆周率

SELECT PI()

计算次方

SELECT
	POW( 2, 2 ),
	POWER( 2, 3 ),
	EXP(4) as \'指数e的4次方\'

计算开平方

SELECT SQRT(25)

计算除法取余

SELECT MOD(5,2);

计算对数

SELECT
    LOG(20.085536923188) AS \'自然指数e为底的对数\',
    LOG10(100) AS \'10为底的对数\'

角度<=>弧度

SELECT
	RADIANS( 180 ) AS \'角度转弧度\',
	DEGREES( 3.1415926535898 ) AS \'弧度转角度\'

三角函数计算

SELECT
    SIN(-3.15) AS \'求正弦(以下参数均是弧度)\',
    ASIN(0.15) AS \'求反正弦\',
    COS(30) AS \'求余弦\',
    ACOS(0.15) AS \'求反余弦\',
    TAN(- 15) AS \'求正切\',
    ATAN(30) AS \'求反正切\',
    ATAN(30, 15) AS \'求反正切\',
    ATAN2(30) AS \'求反正切\',
    ATAN2(30, 15) AS \'求反正切\',
    COT(15) AS \'求余切值\'

进制转换

SELECT
    ASCII(\'abc\') AS \'求第一个字符的ASCII码\',
    BIN(2) AS \'10进制转换为二进制\',
    OCT(7) AS \'10进制转换为八进制\',
    HEX(15) AS \'10进制转换为十六进制\',
    CONV(10, 8, 10) AS \'指定进制转换\'

二、字符串函数

字符串长度

SELECT
	CHAR_LENGTH( \'你好123\' ) AS \'字符数\',
	LENGTH( \'你好123\' ) AS \'字符长度\'

字符拼接

SELECT
    CONCAT(\'12\', \'34\') AS \'字符串普通拼接\',
    CONCAT_WS(\'连接符\', \'a\', \'b\', \'c\') AS \'用连接符拼接\'

字符串大小写转换

SELECT
	UPPER( \'abc\' ) AS \'小转大\',
	UCASE( \'abc\' ) AS \'小转大\',
	LOWER( \'A\' ) AS \'大转小\',
	LCASE( \'A\' ) AS \'大转小\'

字符串截取

SELECT
    LEFT(\'123456789\', 2) AS \'截取从左边开始到第2位\',
    RIGHT(\'123456789\', 2) AS \'截取从右边开始到第2位\',
    SUBSTRING(\'123456789\',3,6) AS \'截取从左边开始第3-6位\',
    MID(\'123456789\',3,6) AS \'截取从左边开始第3-6位\'

复杂截取

SUBSTRING_INDEX(str,x,index):用x截取str,并在截取的数组中取第index个

SELECT SUBSTRING_INDEX(\'a*b\',\'*\',1); -- a
SELECT SUBSTRING_INDEX(\'a*b\',\'*\',-1); -- b
SELECT SUBSTRING_INDEX(SUBSTRING_INDEX(\'a*b*c*d*e\',\'*\',3),\'*\',-1); -- c

指定位置与长度的字符替换

INSERT(str,pos,len,newstr)

str:字符串
pos:str开始被替换的位置
len:被替换的字符串长度
newstr:新字符串

SELECT INSERT(\'12345\',2,1,\'a\')

字符串替换

REPLACE(s,x,y):在字符串s中将x替换成y

SELECT REPLACE(\'abaca\',\'a\',\'0\')

字符串填充

  • LPAD(s,len,x):从左边开始用x填充s到长度为len
  • RPAD(s,len,x):规则同上
SELECT
	LPAD( \'abc\', 5, \'xz\' ) AS \'左填充\',
	RPAD( \'abc\', 5, \'xx\' ) AS \'右填充\';

去除空格(首尾)

SELECT
	LTRIM( \'  123456  \' ) AS \'去除左边空白字符\',
	RTRIM( \'  123456  \' ) AS \'去除右边空白字符\',
	TRIM( \'  123456  \' ) AS \'去除两边空白字符\'

去除指定字符(首尾)

SELECT TRIM(\'@\' FROM \'@@abc@@\') AS \'剔除除指定字符\'

字符串重复

SELECT REPEAT(\'123\',3)

获得n个空格字符

SELECT SPACE(100) AS \'获得n个空格字符\'

翻转字符串

SELECT REVERSE(\'abc\')

比较两个字符串(ASCII码值)大小

SELECT
    ASCII(\'2\'),
    ASCII(\'1\'),
    STRCMP(\'2\', \'1\')

找字符在字符串中的位置

LOCATE(x,s)、POSITION(x IN s):x在s中的位置

SELECT LOCATE(\'4\', \'123456789\'),POSITION(\'5\' IN \'123456789\')

INSTR(s,y):y在s中的位置

SELECT INSTR(\'123456789\',\'2\')

返回字符串第n项

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

SELECT ELT(2,\'a\',\'b\',\'c\')

找位置

FIELD(x,s1,s2...,sn):找到x在s1-sn字符串列表中匹配的位置

SELECT FIELD(\'3\',\'1\',\'2\',\'3\',\'4\',\'5\',\'6\',\'7\',\'8\',\'9\')

FIND_IN_SET(x,strlist) :在strlist字符串列表(注意:必须是"1,2,3,4"这种以逗号分隔的字符串)中找到x的位置

SELECT FIND_IN_SET(\'4\',\'1,2,3,4,5,6,7,8,9\')

计算二进制数真假位

EXPORT_SET(二进制数, 真位, 假位, 连接符, 二进制数中需要的位数):https://vimsky.com/examples/usage/export_set-function-in-mysql.html

SELECT BIN(5),EXPORT_SET(5,\'真位也即二进制1\',\'假位也即二进制0\',\'-连接符-\',5)

SELECT BIN(5),EXPORT_SET(5,\'y\',\'n\',\'——\',5)

计算二进制数真假位返回对应结果

MAKE_SET(x,str1,str2,…):将x转换为二进制数,根据位置一一对应,返回真位对应的字符串,https://blog.csdn.net/qq_41725312/article/details/83039525

SELECT
    BIN(2 | 1),
    MAKE_SET(2 | 1, \'a\', \'b\', \'c\');

三、日期时间函数

返回当前时间相关

SELECT
	NOW() AS \'当前日期时间1\',
	CURRENT_TIMESTAMP () AS \'当前日期时间2\',
	LOCALTIME () AS \'当前日期时间3\',
	SYSDATE() AS \'当前日期时间4\',
	LOCALTIMESTAMP () AS \'当前日期时间5\',
	CURDATE() AS \'当前日期1\',
	CURRENT_DATE () AS \'当前日期2\',
	CURTIME() AS \'当前时间1\',
	CURRENT_TIME () AS \'当前时间2\'

UNIX时间戳相关

SELECT
	UNIX_TIMESTAMP() AS \'UNIX时间戳1\',
	UNIX_TIMESTAMP( \'2023-06-09 13:16:58\' ) AS \'日期时间转UNIX时间戳\',
	FROM_UNIXTIME(1686287851) AS \'UNIX时间戳转日期时间\'

返回UTC格式的日期时间

SELECT UTC_DATE(),UTC_TIME()

在日期时间中取月值

SELECT
    MONTH(\'2023-06-09 13:22:44\') AS \'取月值\',
    MONTHNAME(\'2023-06-09 13:22:44\') AS \'取月名\'

在日期时间中取日值

SELECT
	DAYOFYEAR( \'2023-06-09 13:22:44\' ) AS \'年第几天\',
	DAY ( \'2023-06-09 13:22:44\' ) AS \'月第几天\',
	DAYOFMONTH( \'2023-06-09 13:22:44\' ) AS \'月第几天\',
	DAYNAME( \'2023-06-09 13:22:44\' ) AS \'星期几\';

在日期时间中取周值

SELECT
	DAYOFWEEK( \'2023-06-09 13:22:44\' ) AS \'周内的第几天\',
	WEEKDAY( \'2023-06-09 13:22:44\' ) AS \'星期几\',
	WEEK ( \'2023-06-09 13:22:44\' ) AS \'今年的第几周\',
	WEEKOFYEAR( \'2023-06-09 13:22:44\' ) AS \'今年的第几周\';

在日期时间中取季度值

SELECT QUARTER(\'2023-06-09 13:22:44\') AS \'取季度\'

在日期时间中取时间分部

SELECT
    HOUR(\'2023-06-09 13:22:44\') AS \'取小时\',
    MINUTE(\'2023-06-09 13:22:44\') AS \'取分钟\',
    SECOND(\'2023-06-09 13:22:44\') AS \'取秒\'

在日期时间中提取

SELECT EXTRACT(MICROSECOND FROM \'2023-06-09 13:22:44\') AS \'取微妙\';
SELECT EXTRACT(SECOND FROM \'2023-06-09 13:22:44\') AS \'取秒\';
SELECT EXTRACT(MINUTE FROM \'2023-06-09 13:22:44\') AS \'取分钟\';
SELECT EXTRACT(HOUR FROM \'2023-06-09 13:22:44\') AS \'取小时\';
SELECT EXTRACT(DAY FROM \'2023-06-09 13:22:44\') AS \'取月中第几天\';
SELECT EXTRACT(WEEK FROM \'2023-06-09 13:22:44\') AS \'取年中第几周\';
SELECT EXTRACT(MONTH FROM \'2023-06-09 13:22:44\') AS \'取月\';
SELECT EXTRACT(QUARTER FROM \'2023-06-09 13:22:44\') AS \'取季度\';
SELECT EXTRACT(YEAR FROM \'2023-06-09 13:22:44\') AS \'取年\';
SELECT EXTRACT(SECOND_MICROSECOND FROM \'2023-06-09 13:22:44\') AS \'取秒微妙\';
SELECT EXTRACT(MINUTE_MICROSECOND FROM \'2023-06-09 13:22:44\') AS \'取分钟秒微妙\';
SELECT EXTRACT(MINUTE_SECOND FROM \'2023-06-09 13:22:44\') AS \'取分钟秒\';
SELECT EXTRACT(HOUR_MICROSECOND FROM \'2023-06-09 13:22:44\') AS \'取小时分钟秒微妙\';
SELECT EXTRACT(HOUR_SECOND FROM \'2023-06-09 13:22:44\') AS \'取小时分钟秒\';
SELECT EXTRACT(HOUR_MINUTE FROM \'2023-06-09 13:22:44\') AS \'取小时分钟\';
SELECT EXTRACT(DAY_MICROSECOND FROM \'2023-06-09 13:22:44\') AS \'取日小时分钟秒微妙\';
SELECT EXTRACT(DAY_SECOND FROM \'2023-06-09 13:22:44\') AS \'取日小时分钟秒\';
SELECT EXTRACT(DAY_MINUTE FROM \'2023-06-09 13:22:44\') AS \'取日小时分钟\';
SELECT EXTRACT(DAY_HOUR FROM \'2023-06-09 13:22:44\') AS \'取日小时\';
SELECT EXTRACT(YEAR_MONTH FROM \'2023-06-09 13:22:44\') AS \'取年月\';

将时间与秒数互转

SELECT
	TIME_TO_SEC( \'2023-06-09 00:01:00\' ) AS \'时间转秒数1\',
	TIME_TO_SEC( \'00:01:00\' ) AS \'时间转秒数2\',
	SEC_TO_TIME(120) AS \'秒数转时间\'

计算0000年1月1日相关

SELECT
	TO_DAYS( \'0000-01-01\' ) AS \'计算到0000-01-01的天数1\',
	TO_DAYS( \'2023-06-09 13:58:50\') AS \'计算到0000-01-01的天数2\',
	FROM_DAYS(739045) AS \'计算0000-01-01往后偏移的日期\'

计算天数差值(忽略时间分部)

SELECT DATEDIFF(\'2023-06-09 00:00:00\',\'2023-06-08 23:59:59\')

加减指定天数(忽略时间分部)

SELECT
    \'2023-06-09 14:05:30\' AS \'原始值\',
    ADDDATE(\'2023-06-09 14:05:30\', 1) AS \'加1天\',
    SUBDATE(\'2023-06-09 14:05:30\', 1) AS \'减1天\',
    ADDTIME(\'2023-06-09 14:05:30\', 1) AS \'加1秒\',
    SUBTIME(\'2023-06-09 14:05:30\', 1) AS \'减1秒\'

日期时间通用偏移

正值向未来偏移,负值向过去偏移

  • ADDDATE(d,INTERVAL 数值 type)
  • DATE_ADD(d,INTERVAL 数值 type)

负值向过去偏移,正值向未来偏移

  • SUBDATE(d,INTERVAL 数值 type)

type可选为以下之一:

  • MICROSECOND
  • SECOND
  • MINUTE
  • HOUR
  • DAY
  • WEEK
  • MONTH
  • QUARTER
  • YEAR
  • SECOND_MICROSECOND
  • MINUTE_MICROSECOND
  • MINUTE_SECOND
  • HOUR_MICROSECOND
  • HOUR_SECOND
  • HOUR_MINUTE
  • DAY_MICROSECOND
  • DAY_SECOND
  • DAY_MINUTE
  • DAY_HOUR
  • YEAR_MONTH

时间格式化

1、常用格式

SELECT 
DATE_FORMAT(\'2011-09-20 08:30:45\', \'%Y-%m-%d %H:%i:%S\') AS \'指定时间\',
DATE_FORMAT(NOW(), \'%Y-%m-%d %H:%i:%S\') AS \'现在\'

2、日期格式化函数

DATE_FORMAT(d,f)

TIME_FORMAT(t,f)

3、获取格式化字符串函数

GET_FORMAT(DATE|TIME|DATETIME, \'EUR\'|\'USA\'|\'JIS\'|\'ISO\'|\'INTERNAL\')

SELECT 
GET_FORMAT(DATETIME,\'EUR\') AS \'欧盟标准\',
GET_FORMAT(DATETIME,\'USA\') AS \'美国标准\',
GET_FORMAT(DATETIME,\'JIS\') AS \'日本工业标准\',
GET_FORMAT(DATETIME,\'ISO\') AS \'国际标准化组织制订的标准\',
GET_FORMAT(DATETIME,\'INTERNAL\') AS \'国际标准\',
GET_FORMAT(DATE,\'EUR\'),
GET_FORMAT(DATE,\'USA\'),
GET_FORMAT(DATE,\'JIS\'),
GET_FORMAT(DATE,\'ISO\'),
GET_FORMAT(DATE,\'INTERNAL\'),
GET_FORMAT(TIME,\'EUR\'),
GET_FORMAT(TIME,\'USA\'),
GET_FORMAT(TIME,\'JIS\'),
GET_FORMAT(TIME,\'ISO\'),
GET_FORMAT(TIME,\'INTERNAL\')

4、格式字符串表示

%M      月名字(January……December)
%W      星期名字(Sunday……Saturday)
%D      有英语前缀的月份的日期(1st, 2nd, 3rd, 等等)
%Y      年, 数字, 4 位
%y      年, 数字, 2 位
%a      缩写的星期名字(Sun……Sat)
%d      月份中的天数, 数字(00……31)
%e      月份中的天数, 数字(0……31)
%m      月, 数字(01……12)
%c      月, 数字(1……12)
%b      缩写的月份名字(Jan……Dec)
%j      一年中的天数(001……366)
%H      小时(00……23)
%k      小时(0……23)
%h      小时(01……12)
%I      小时(01……12)
%l      小时(1……12)
%i      分钟, 数字(00……59)       		//这个最TM坑人,以前一直记得是m,错了半天才弄明白咋回事
%r      时间,12 小时(hh:mm:ss [AP]M)
%T      时间,24 小时(hh:mm:ss)
%S      秒(00……59)
%s      秒(00……59)
%p      AM或PM
%w      一个星期中的天数(0=Sunday ……6=Saturday)
%U      星期(0……52), 这里星期天是星期的第一天
%u      星期(0……52), 这里星期一是星期的第一天
%%      一个文字"%"

四、条件判断函数

IF

IF(expr,v1,v2):如果表达式expr成立,返回结果v1;否则,返回结果v2

SELECT IF(\'1>2\',\'正确\',\'错误\')

IFNULL

IFNULL(v1,v2):如果v1的值不为NULL,则返回v1,否则返回v2

SELECT IFNULL(NULL,\'Hello Word\')

CASE

CASE表示函数开始,END表示函数结束。如果e1成立,则返回v1,如果e2成立,则返回v2,当全部不成立则返回vn,而当有一个成立之后,后面的就不执行了。

  • 语法1
CASE 
  WHEN e1
  THEN v1
  WHEN e2
  THEN e2
  ...
  ELSE vn
END
SELECT
    CASE
        WHEN 1 > 0 THEN \'1 > 0\'
        WHEN 2 > 0 THEN \'2 > 0\'
        ELSE \'3 > 0\'
    END
  • 语法2
CASE expr 
  WHEN e1 THEN v1
  WHEN e1 THEN v1
  ...
  ELSE vn
END
SELECT
    CASE 1
        WHEN 1 THEN \'A\'
        WHEN 2 THEN \'B\'
        ELSE \'C\'
    END

五、系统信息函数

系统相关

SELECT
    VERSION() AS \'mysql版本\',
    CONNECTION_ID() AS \'mysql当前链接数\',
    DATABASE() AS \'当前使用的数据库1\',
    SCHEMA() AS \'当前使用的数据库2\'

用户相关

SELECT
    USER(),
    SYSTEM_USER(),
    SESSION_USER(),
    CURRENT_USER(),
    CURRENT_USER

字符集相关

SELECT
	CHARSET( "你好" ) AS \'返回字符串str的字符集\',
	COLLATION ( "你好" ) AS \'返回字符串str的字符排列方式\',
	LAST_INSERT_ID() AS \'返回最近生成的AUTO_INCREMENT(自增)值\'

六、加密函数

SELECT MD5(\'计算摘要\')

8.0.16废弃:PASSWORD(str)、ENCODE(str,pswd_str)与DECODE(crypt_str,pswd_str)

七、其他函数

mysql中的get_lock锁机制解析

https://blog.csdn.net/tangtong1/article/details/51792617/

IP地址与数字相互转换的函数

SELECT
	INET_ATON( \'192.168.0.1\' ) AS \'IP转数字\',
	INET_NTOA( 3232235521 ) AS \'数字转IP\'

加锁函数和解锁函数

  • GET_LOCK(name,time)函数定义一个名称为name、持续时间长度为time秒的锁。如果锁定成功,则返回1;如果尝试超时,则返回0;如果遇到错误,返回NULL。
  • IS_USED_LOCK(name)函数判断名称为name的锁定是否存在,存在返回1,不存在返回NULL
  • IS_FREE_LOCK(name)函数判断是否已使用名为name的锁定。如果使用,返回0,否则,返回1;
  • RELEASE_LOCK(name)函数解除名称为name的锁。如果解锁成功,则返回1;如果尝试超时,返回0了如果解锁失败,返回NULL;
SELECT GET_LOCK(\'MySQL1\',10);
SELECT IS_USED_LOCK(\'MySQL1\');

SELECT IS_FREE_LOCK(\'MySQL1\');
SELECT RELEASE_LOCK(\'MySQL1\');

重复执行指定操作的函数

BENCHMARK(count,expr)函数将表达式expr重复执行count次,然后返回执行时间。该函数可以用来判断MySQL处理表达式的速度。

SELECT BENCHMARK(10000,NOW())

改变字符集的函数

CONVERT(s USING cs)函数将字符串s的字符集变成cs。

SELECT
    CHARSET(\'ABC\') AS \'查看ABC的字符集\',
    CONVERT(\'ABC\' USING gbk) AS \'ABC使用gbk字符集\',
    CHARSET(CONVERT(\'ABC\' USING gbk)) AS \'ABC从原来字符集转换为gbk字符集\'

转换数据类型

  • CAST(x AS type)
  • CONVERT(x,type)

  这两个函数只对BINARY、CHAR、DATE、DATETIME、TIME、SIGNED INTEGER、UNSIGNED INTEGER有效

-- 字符串 转 整数
SELECT CAST(\'123\' AS UNSIGNED INTEGER) + 1
-- mysql的隐式转换
SELECT \'123\' + 1
-- DATETIME 转换为 DATE
SELECT CAST(NOW() AS DATE)

参考:

https://vimsky.com/examples/usage/export_set-function-in-mysql.html

https://www.cnblogs.com/kissdodog/p/4168721.html

Mysql常用函数小总结

Mysql数据库提供了大量的函数,学会使用将会事半功倍,以下分别为字符串函数,数值函数,时间和日期函数,系统函数

(一)字符串函数

  •  CONCAT(s1,s2,...)

返回连接参数产生的字符串,一个或多个待拼接的内容,任意一个为NULL则返回值为NULL

SELECT CONCAT(hel,llo);
---- 返回hello

 

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

返回多个字符串拼接之后的字符串,每个字符串之间有一个x,x可以是“”,“ ”,“-”

 

  • STRCMP(s1,s2)  

若s1和s2中所有的字符串对应位置逐个比较,都相同,则返回0;根据当前分类次序,第一个参数小于第二个则返回-1,其他情况返回1

 

SELECT STRCMP("runoob", "runoob");
---- 返回0
  • CHAR_LENGTH(str)

计算字符串字符个数,英文占用一个字节,中文与编码有关 UTF-8:1个汉字=3个字节;GBK:一个汉字=2个字节

  • LENGTH(s)

返回字符串 s 的字符数

SELECT LENGTH(1234);
---- 返回4
  • LCASE(s)
  • LOWER(s)

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

SELECT LOWER(RUNOOB);
---- 返回runoob
  • UCASE(s)
  • UPPER(s)

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

SELECT UCASE(runoob);
---- 返回RUNOOB
  • FIND_IN_SET(s1,s2)

返回在字符串s2中与s1匹配的字符串的位置,s2是用逗号隔开的字符串,位置从1开始算,0表示没有找到

SELECT FIND_IN_SET("c", "a,b,c,d,e");
---- 返回3
  • LOCATE(str1,str)、
  • POSITION(str1 IN str)、
  • INSTR(str,str1)

三个函数作用相同,返回子字符串str1在字符串str中的开始位置(从第几个字符开始)

SELECT LOCATE(st,myteststring);
---- 返回5
  • LEFT(s,n)、
  • RIGHT(s,n)

前者返回字符串s从最左边开始的n个字符,后者返回字符串s从最右边开始的n个字符

  • SUBSTRING(s,start,length)、
  • SUBSTR(s, start, length)、
  • MID(s,start,length)

三个函数作用相同,从字符串s中返回一个第start个字符开始、长度为length的字符串

SELECT SUBSTR/SUBSTRING("RUNOOB", 2, 3);
---- 从字符串 RUNOOB 中的第 2 个位置截取 3个 字符,返回UNO
  • TRIM(s)

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

SELECT TRIM(    RUNOOB    );
---- 返回RUNOOB
  • LTRIM(s)

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

SELECT LTRIM(    RUNOOB    );
---- 返回 ’RUNOOB   ‘
  • RTRIM(s)

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

SELECT RTRIM(    RUNOOB    );
---- 返回 ’    RUNOOB‘
  • INSERT

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

SELECT INSERT("google.com", 1, 6, "runnob");
---- 返回runoob.com
  • REPLACE(s,s1,s2)

返回一个字符串,用字符串s2替代字符串s中所有的字符串s1

(二)数学函数

ABS(x) 返回x的绝对值

SELECT ABS(-1);
---- 返回1

AVG(expression) 返回一个表达式的平均值,expression 是一个字段

SELECT AVG(age) FROM student;

CEIL(x)/CEILING(x) 返回大于或等于 x 的最小整数 (向上取整)

SELECT CEIL(1.5);
SELECT CEILING(1.5);   
---- 返回2

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

SELECT FLOOR(1.5); 
---- 返回1

EXP(x) 返回 e 的 x 次方

SELECT EXP(3);
---- 计算 e 的三次方,返回20.085536923188

GREATEST(expr1, expr2, expr3, …) 返回列表中的最大值

SELECT GREATEST(3, 12, 34, 8, 25);
---- 返回以下数字列表中的最大值34

LEAST(expr1, expr2, expr3, …) 返回列表中的最小值

SELECT LEAST(3, 12, 34, 8, 25);
---- 返回以下数字列表中的最小值3

LN 返回数字的自然对数

SELECT LN(2);
---- 返回 2 的自然对数:0.6931471805599453

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

SELECT LOG(20.085536923188);
---- 返回 3

MAX(expression)返回字段 expression 中的最大值

SELECT MAX(age) AS maxAge FROM Student;
---- age最大值

MIN(expression)返回字段 expression 中的最大值

SELECT MIN(age) AS minAge FROM Student;
---- age最小值

POW(x,y)/POWER(x,y)返回 x 的 y 次方

SELECT POW(2,3);
SELECT POWER(2,3);
---- 返回2 的 3 次方:8

RAND()返回 0 到 1 的随机数

SELECT RAND();
---- 返回 0 到 1 的随机数,若()里面有数字,RAND(x),x相同时,返回值相同

ROUND(x)返回离 x 最近的整数

SELECT ROUND(1.23456);
---- 返回 1

SIGN(x)返回 x 的符号,x 是负数、0、正数分别返回 -1、0 和 1

SELECT SIGN(-10);
---- 返回 -1

SQRT(x)返回x的平方根

SELECT SQRT(25);
---- 返回5

SUM(expression)返回指定字段的总和

SELECT SUM(age) AS totalAage FROM Student;
---- 返回age的总和

TRUNCATE(x,y)返回数值 x 保留到小数点后 y 位的值(与 ROUND 最大的区别是不会进行四舍五入)

SELECT TRUNCATE(1.23456,3);
---- 返回1.234

(三)日期函数

CURDATE()/CURRENT_DATE()返回当前日期

SELECT CURDATE();
SELECT CURRENT_DATE();
---- 返回2019-02-19

CURRENT_TIME()/CURTIME()返回当前时间

SELECT CURRENT_TIME();
---- 返回11:40:45

CURRENT_TIMESTAMP()返回当前日期和时间

SELECT CURRENT_TIMESTAMP();
---- 返回2019-02-19 11:41:32

DATE()从日期或日期时间表达式中提取日期值

SELECT DATE("2017-06-15 11:11:16");
---- 返回2017-06-15

DAY(d)返回日期值 d 的日期部分

SELECT DAY("2017-06-15"); 
---- 返回15

DATEDIFF(d1,d2)计算日期 d1-d2 之间相隔的天数

SELECT DATEDIFF(2001-01-01,2001-02-02); 
---- 返回-32

DAYNAME(d)返回日期 d 是星期几,如 Monday,Tuesday

SELECT DAYNAME(2011-11-11 11:11:11);
---- 返回Friday

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

SELECT DAYOFMONTH(2011-11-11 11:11:11);
---- 返回11

DAYOFWEEK(d)日期 d 今天是星期几,1 星期日,2 星期一,以此类推

SELECT DAYOFWEEK(2011-11-11 11:11:11);
---- 返回6

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

SELECT DAYOFYEAR(2011-11-11 11:11:11);
---- 返回315

EXTRACT(type FROM d)从日期 d 中获取指定的值,type 指定返回的值,每个type都是一个函数

type可取值为:
MICROSECOND
SECOND
MINUTE
HOUR
DAY
WEEK
MONTH
QUARTER
YEAR
SECOND_MICROSECOND
MINUTE_MICROSECOND
MINUTE_SECOND
HOUR_MICROSECOND
HOUR_SECOND
HOUR_MINUTE
DAY_MICROSECOND
DAY_SECOND
DAY_MINUTE
DAY_HOUR
YEAR_MONTH

SELECT EXTRACT(MINUTE FROM 2011-12-13 14:15:16);
---- 返回15

UNIX_TIMESTAMP()得到时间戳

SELECT UNIX_TIMESTAMP(2019-2-19);
SELECT UNIX_TIMESTAMP(expression);
---- 返回1550505600

FROM_UNIXTIME()时间戳转日期

SELECT FROM_UNIXTIME(1550505600);
---- 返回2019-02-19 00:00:00
SELECT FROM_UNIXTIME(1550505600, %Y-%m-%d);
---- 返回2019-02-19

(四)系统信息函数

(1)VERSION()查看MySQL版本号

(2)CONNECTION_ID()查看当前用户的连接数

(3)USER()、CURRENT_USER()、SYSTEM_USER()、SESSION_USER()

查看当前被MySQL服务器验证的用户名和主机的组合,一般这几个函数的返回值是相同的

(4)CHARSET(str)查看字符串str使用的字符集

(5)COLLATION()查看字符串排列方式

DATABASE()返回当前数据库名

(五)高级函数

IF(expr,v1,v2)如果表达式 expr 成立,返回结果 v1;否则,返回结果 v2

SELECT IF(1>0,yes,no);
---- 返回yes

CONV(x,f1,f2)返回 f1 进制数变成 f2 进制数

SELECT CONV(13,10,2);
---- 返回1101

 

如有问题 欢迎指出

 

 

 

参考文献:

https://blog.csdn.net/zeng_ll/article/details/87706409

https://www.cnblogs.com/panchanggui/p/10652322.html

以上是关于MYSQL常用函数总结的主要内容,如果未能解决你的问题,请参考以下文章

Mysql常用函数总结

Mysql常用函数小总结

Mysql常用函数小总结

Mysql常用函数总结

mysql时间类型总结及常用时间函数

Sql总结之Sql--常用函数