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锁机制解析
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,不存在返回NULLIS_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
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常用函数总结的主要内容,如果未能解决你的问题,请参考以下文章