当前位置:网站首页>mysql进阶(二十九)常用函数汇总
mysql进阶(二十九)常用函数汇总
2022-08-08 16:32:00 【InfoQ】
一、数学函数
ABS(x)
返回x的绝对值;
BIN(x)
返回x的二进制(OCT
返回八进制,HEX
返回十六进制);
CEILING(x)
返回大于x的最小整数值;
EXP(x)
返回值e(自然对数的底)的x次方;
FLOOR(x)
返回小于x的最大整数值;
GREATEST(x1,x2,...,xn)
返回集合中最大的值;
LEAST(x1,x2,...,xn)
返回集合中最小的值;
LN(x)
返回x的自然对数;
LOG(x,y)
返回x的以y为底的对数;
MOD(x,y)
返回x/y的模(余数);
PI()
返回pi
的值(圆周率);
RAND()
返回0到1内的随机值,可以通过提供一个参数(种子)使RAND()
随机数生成器生成一个指定的值。
ROUND(x,y)
返回参数x的四舍五入的有y位小数的值;
SIGN(x)
返回代表数字x的符号的值;
SQRT(x)
返回一个数的平方根;
TRUNCATE(x,y)
返回数字x截短为y位小数的结果;
二、聚合函数
GROUP BY
SELECT
AVG(col)
返回指定列的平均值;
COUNT(col)
返回指定列中非NULL
值的个数;
MIN(col)
返回指定列的最小值;
MAX(col)
返回指定列的最大值;
SUM(col)
返回指定列的所有值之和;
GROUP_CONCAT(col)
返回由属于一组的列值连接组合而成的结果;
三、字符串函数
ASCII(char)
返回字符的ASCII
码值;
BIT_LENGTH(str)
返回字符串的比特长度;
CONCAT(s1,s2...,sn)
将s1,s2...,sn连接成字符串;
CONCAT_WS(sep,s1,s2...,sn)
将s1,s2...,sn连接成字符串,并用sep
字符间隔;
INSERT(str,x,y,instr)
将字符串str从第x位置开始,y个字符长的子串替换为字符串instr,返回结果;
FIND_IN_SET(str,list)
分析逗号分隔的list
列表,如果发现str,返回str在list中的位置;
LCASE(str)
或LOWER(str)
返回将字符串str中所有字符改变为小写后的结果;
LEFT(str,x)
返回字符串str中最左边的x个字符;
LENGTH(s)
返回字符串str中的字符数;
LTRIM(str)
从字符串str中切掉开头的空格;
POSITION(substr,str)
返回子串substr在字符串str中第一次出现的位置;
QUOTE(str)
用反斜杠转义str中的单引号;
REPEAT(str,srchstr,rplcstr)
返回字符串str重复x次的结果;
REVERSE(str)
返回颠倒字符串str的结果;
RIGHT(str,x)
返回字符串str中最右边的x个字符;
RTRIM(str)
返回字符串str尾部的空格;
STRCMP(s1,s2)
比较字符串s1和s2;
TRIM(str)
去除字符串首部和尾部的所有空格;
UCASE(str)
或UPPER(str)
返回将字符串str中所有字符转变为大写后的结果;
四、日期和时间函数
CURDATE()
或CURRENT_DATE()
返回当前日期;
CURTIME()
或CURRENT_TIME()
返回当前时间;
DATE_ADD(date,INTERVAL int keyword)
返回日期date加上间隔时间int的结果(int必须按照关键字进行格式化),如:SELECTDATE_ADD(CURRENT_DATE,INTERVAL 6 MONTH);
DATE_FORMAT(date,fmt)
依照指定的fmt格式格式化日期date值;
DATE_SUB(date,INTERVAL int keyword)
返回日期date加上间隔时间int的结果(int必须按照关键字进行格式化),如:SELECTDATE_SUB(CURRENT_DATE,INTERVAL 6 MONTH);
DAYOFWEEK(date)
返回date所代表的一星期中的第几天(1~7);
DAYOFMONTH(date)
返回date是一个月的第几天(1~31);
DAYOFYEAR(date)
返回date是一年的第几天(1~366);
DAYNAME(date)
返回date的星期名,如:SELECT DAYNAME(CURRENT_DATE);
FROM_UNIXTIME(ts,fmt)
根据指定的fmt格式,格式化UNIX
时间戳ts;
HOUR(time)
返回time的小时值(0~23);
MINUTE(time)
返回time的分钟值(0~59);
MONTH(date)
返回date的月份值(1~12);
MONTHNAME(date)
返回date的月份名,如:SELECT MONTHNAME(CURRENT_DATE);
NOW()
返回当前的日期和时间;
QUARTER(date)
返回date在一年中的季度(1~4),如SELECT QUARTER(CURRENT_DATE);
WEEK(date)
返回日期date为一年中第几周(0~53);
YEAR(date)
返回日期date的年份(1000~9999);
4.1 示例
SELECT FROM_UNIXTIME(UNIX_TIMESTAMP());
SELECT EXTRACT(YEAR_MONTH FROM CURRENT_DATE);
SELECT EXTRACT(DAY_SECOND FROM CURRENT_DATE);
SELECT EXTRACT(HOUR_MINUTE FROM CURRENT_DATE);
SELECT PERIOD_DIFF(200302,199802);
SELECT DATE_FORMAT(FROM_DAYS(TO_DAYS(NOW())-TO_DAYS(birthday)),'%Y')+0 AS age FROM employee;
SELECT DATE_FORMAT(NOW(), '%Y') - DATE_FORMAT(birthday, '%Y') -(DATE_FORMAT(NOW(), '00-%m-%d') <DATE_FORMAT(birthday, '00-%m-%d')) AS age from employee
五、加密函数
AES_ENCRYPT(str,key)
返回用密钥key
对字符串str利用高级加密标准算法加密后的结果,调用AES_ENCRYPT
的结果是一个二进制字符串,以BLOB
类型存储;
AES_DECRYPT(str,key)
返回用密钥key对字符串str利用高级加密标准算法解密后的结果
DECODE(str,key)
使用key作为密钥解密加密字符串str;
ENCRYPT(str,salt)
- 使用
UNIX crypt()
函数,用关键词salt
(一个可以唯一确定口令的字符串,就像钥匙一样)加密字符串str;
ENCODE(str,key)
使用key作为密钥加密字符串str,调用ENCODE()
的结果是一个二进制字符串,它以BLOB
类型存储;
MD5()
计算字符串str的MD5校验和;
PASSWORD(str)
返回字符串str的加密版本,这个加密过程是不可逆转的,和UNIX
密码加密过程使用不同的算法。
SHA()
计算字符串str的安全散列算法(SHA)校验和;
5.1 示例
SELECT ENCRYPT('root','salt');
SELECT ENCODE('xufeng','key');
SELECT DECODE(ENCODE('xufeng','key'),'key');#加解密放在一起
SELECT AES_ENCRYPT('root','key');
SELECT AES_DECRYPT(AES_ENCRYPT('root','key'),'key');
SELECT MD5('123456');
SELECT SHA('123456');
六、控制流函数
MySQL
SQL
MySQL
CASE WHEN[test1] THEN [result1]...ELSE [default] END
如果testN是真,则返回resultN,否则返回default;
CASE [test] WHEN[val1] THEN [result]...ELSE [default]END
如果test和valN相等,则返回resultN,否则返回default;
IF(test,t,f)
如果test是真,返回t;否则返回f;
IFNULL(arg1,arg2)
如果arg1不是空,返回arg1,否则返回arg2;
NULLIF(arg1,arg2)
如果arg1=arg2返回NULL;否则返回arg1;
IFNULL()
NULL
NULL
SELECT IFNULL(1,2), IFNULL(NULL,10),IFNULL(4*NULL,'false');
NULLIF()
NULL
SELECT NULLIF(1,1),NULLIF('A','B'),NULLIF(2+3,4+1);
IF()
MySQL
IF()
IF()
IF()
SELECTIF(1<10,2,3),IF(56>100,'true','false');
IF()
MySQL
CASE
PHP
Perl
switch-case
CASE
CASE [expression to be evaluated]
WHEN [val 1] THEN [result 1]
WHEN [val 2] THEN [result 2]
WHEN [val 3] THEN [result 3]
......
WHEN [val n] THEN [result n]
ELSE [default result]
END
WHEN-THEN
WHEN-THEN
ELSE
END
CASE
ELSE
ELSE
WHEN-THEN
MySQL
NULL
CASE
CASE
WHEN [conditional test 1] THEN [result 1]
WHEN [conditional test 2] THEN [result 2]
ELSE [default result]
END
mysql>SELECT CASE 'green'
WHEN 'red' THEN 'stop'
WHEN 'green' THEN 'go' END;
SELECT CASE 9 WHEN 1 THEN 'a' WHEN 2 THEN 'b' ELSE 'N/A' END;
SELECT CASE WHEN (2+2)=4 THEN 'OK' WHEN(2+2)<>4 THEN 'not OK' END ASSTATUS;
SELECT Name,IF((IsActive = 1),'已激活','未激活') AS RESULT FROMUserLoginInfo;
SELECT fname,lname,(math+sci+lit) AS total,
CASE WHEN (math+sci+lit) < 50 THEN 'D'
WHEN (math+sci+lit) BETWEEN 50 AND 150 THEN 'C'
WHEN (math+sci+lit) BETWEEN 151 AND 250 THEN 'B'
ELSE 'A' END
AS grade FROM marks;
SELECT IF(ENCRYPT('sue','ts')=upass,'allow','deny') AS LoginResultFROM users WHERE uname = 'sue';#一个登陆验证
七、格式化函数
DATE_FORMAT(date,fmt)
依照字符串fmt格式化日期date值;
FORMAT(x,y)
把x格式化为以逗号隔开的数字序列,y是结果的小数位数;
INET_ATON(ip)
返回IP地址的数字表示;
INET_NTOA(num)
返回数字所代表的IP地址;
TIME_FORMAT(time,fmt)
依照字符串fmt格式化时间time值;
FORMAT()
SELECT FORMAT(34234.34323432,3);
SELECT DATE_FORMAT(NOW(),'%W,%D %M %Y %r');
SELECT DATE_FORMAT(NOW(),'%Y-%m-%d');
SELECT DATE_FORMAT(19990330,'%Y-%m-%d');
SELECT DATE_FORMAT(NOW(),'%h:%i %p');
SELECT INET_ATON('10.122.89.47');
SELECT INET_NTOA(175790383);
八、类型转化函数
MySQL
CAST()
BINARY,CHAR,DATE,TIME,DATETIME,SIGNED,UNSIGNED
SELECT CAST(NOW() AS SIGNED INTEGER),CURDATE()+0;
SELECT 'f'=BINARY 'F','f'=CAST('F' AS BINARY);
九、系统信息函数
DATABASE()
返回当前数据库名;
BENCHMARK(count,expr)
将表达式expr重复运行count次;
CONNECTION_ID()
返回当前客户的连接ID;
FOUND_ROWS()
返回最后一个SELECT
查询进行检索的总行数;
USER()
或SYSTEM_USER()
返回当前登陆用户名;
VERSION()
返回MySQL服务器的版本;
SELECT DATABASE(),VERSION(),USER();
SELECTBENCHMARK(9999999,LOG(RAND()*PI()));#该例中,MySQL计算LOG(RAND()*PI())表达式9999999次。
边栏推荐
- Go 语言 Strconv 库常用方法
- Es的索引操作(代码中的基本操作)
- Acwing Week 63 [Unfinished]
- 谈谈怎么可以得到显著性图 特征图 featuremap
- 10.cuBLAS开发指南中文版--cuBLAS中的logger配置
- jupyter notebook hide & show all output
- 【论文阅读】RAL 2022: Receding Moving Object Segmentation in 3D LiDAR Data Using Sparse 4D Convolutions
- [机缘参悟-64]:《兵者,诡道也》-5-孙子兵法解读-混战计
- Redis哨兵的配置和原理
- Building and Visualizing Sudoku Games with Pygame
猜你喜欢
耐心排序——专门快速解决最长递增子数组
OpenAI怎么写作「谷歌小发猫写作」
[uniapp applet] view container cover-view
promise学习笔记
egg(二十):fs读取本地的txt文件
基于ECS实现一分钟自动化部署【华为云至简致远】
腾讯云产品可观测最佳实践 (Function)
论文解读(soft-mask GNN)《Soft-mask: Adaptive Substructure Extractions for Graph Neural Networks》
iNFTnews | 元宇宙为企业发展带来新思路
GHOST tool to access the database
随机推荐
laravel - 查询构建器2
好用的项目工时管理系统有哪些
开源项目管理解决方案Leantime
数字图像处理(六)—— 图像压缩
json根据条件存入数据库
论文解读(soft-mask GNN)《Soft-mask: Adaptive Substructure Extractions for Graph Neural Networks》
Groovy XML JSON
The realization of the salary slip issuing function of WeChat public account + web background
手机注册股票开户的流程?网上开户安全?
Spam accounts are a lot of trouble, and device fingerprints are quickly found
Redis design and implementation notes (1)
基于华为云ModelArts的水表读数识别开发实践【华为云至简致远】
元宇宙医疗或将改变医疗格局
最稳定的淘宝商品详情接口
jupyter notebook 隐藏&显示全部输出内容
bzoj1097 [POI2007]旅游景点atr
ASP.NET Core依赖注入之旅:4.体验服务的注册和消费
基于FTP协议的Excel文件上传与下载
【入门PCB】立创eda的学习
The situation of the solution of the equation system and the correlation transformation of the vector group