整理 MySQL 常用函数,小伙伴们在也不发愁了

在这里插入图片描述

前言

  为了简化操作,MySQL 提供了大量的函数,会对传递进来的参数进行处理,并返回一个处理结果,也就是返回一个值。MySQL 包含了大量并且丰富的函数,这里只是对 MySQL 常用函数进行简单的分类,大概包括数值型函数、字符串型函数、日期时间函数、聚合函数等。剩下的比较罕见的函数就不再整理了,小伙伴们可以到「MySQL 官网」查询。

MySQL常用函数
1.字符串函数
2.数字函数
3.日期函数
4.聚合函数
5.流程控制函数

MySQL函数是MySQL数据库提供的内部函数,这些内部函数可以帮助用户更加方便的处理表中的数据,可以使MySQL数据库的功能更加强大。SELECT语句及其条件表达式都可以使用这些函数。同时,INSERT、UPDATE、DELECT语句及其条件表达式也可以使用这些函数。例如,表中的某个数据是负数,现在需要将这个数据显示为正数。这就可以使用绝对值函数。

一、字符串函数

字符串函数是最常用的函数,可以对字符串类型数据进行处理,MySQL也支持许多字符串函数,以下是MySQL支持的字符串函数的表。

函数名称作 用
ASCII(s)获取字符串的 ASCII 码
CHAR_LENGTH(s)返回字符串的长度(以字符为单位)
CHARACTER_LENGTH(s)返回字符串的长度(以字符为单位)
CONCAT(s1,s2…,sn)合并字符串函数,将两个或多个表达式相加。
如果该函数中的任何参数为 null,返回结果为 null
CONCAT_WS(x, s1,s2…sn)同 CONCAT 函数,但是每个字符串之间要加上 x,x 可以是分隔符
FIELD(s,s1,s2…)返回第一个字符串 s 在字符串列表(s1,s2…)中的位置
FIND_IN_SET(s1,s2)返回在字符串s2中与s1匹配的字符串的位置
FORMAT(x,n)将数字 x 进行格式化 “#,###.##”,保留到小数点后 n 位,最后一位四舍五入
INSERT替换字符串函数
INSTR(s1,x,len,s2)字符串 s2 替换 s1 的 x 位置开始长度为 len 的字符串
LCASE将字符串转换为小写
LEFT(s,n)从左侧字截取符串,返回字符串 s 的前 n 个字符
LENGTH返回字符串的长度(以字节为单位)
LOCATE(s1,s)从字符串 s 中获取 s1 的开始位置
LOWER将字符串转换为小写
LPAD(s1,len,s2)在字符串 s1 的开始处填充字符串 s2,使字符串长度达到 len
LTRIM(s)去掉字符串 s 开始处的空格
MID(s,n,len)从字符串 s 的 n 位置截取长度为 len 的子字符串
POSITION(s1 IN s)从字符串 s 中获取 s1 的开始位置
REPEAT(s,n)将字符串 s 重复 n 次
REPLACE(s,s1,s2)字符串替换函数,将字符串 s2 替代字符串 s 中的字符串 s1
REVERSE字符串反转(逆序)函数,返回与原始字符串顺序相反的字符串
RIGHT(s,n)从右侧字截取符串,返回字符串 s 的后 n 个字符
RPAD(s1,len,s2)在字符串 s1 的结尾处添加字符串 s2,使字符串的长度达到 len
RTRIM(s)去掉字符串 s 结尾处的空格
SPACE(n)返回 n 个空格
STRCMP(s1,s2)比较字符串 s1 和 s2,如果相等返回 0 ,如果 s1>s2 返回 1,如果 s1<s2 返回 -1
SUBSTR(s, start, length)从字符串 s 的 start 位置截取长度为 length 的子字符串
SUBSTRING(s, start, length)截取字符串,从字符串 s 的 start 位置截取长度为 length 的子字符串
TRIM(s)删除字符串 s 开始和结尾处的空格
UCASE(s)将字符串转换为大写
UPPER将字符串中的字母转换为大写

二、数学函数

  除去加减乘除的符号外,数字计算上,MySQL也提供了一些常用的数学计算函数,主要用于处理数字,包括整型、浮点数等。数学函数包括绝对值函数、正弦函数、余弦函数、获取随机数的函数等。

函数名称作 用
ABS(x)返回数字的绝对值
ACOS求反余弦值,与函数 COS 互为反函数
ASIN求反正弦值,与函数 SIN 互为反函数
ATAN(x)求反正切值,与函数 TAN 互为反函数
CEIL(x)返回不小于参数的最小整数,即向上取整
CEILING)返回不小于参数的最小整数,即向上取整
COS(x)求余弦值
COT(x)求余切值
DEGREES(x)将弧度转换为角度
DIV用于整数除法
EXP(x)返回 e 的 x 次方
FLOOR(x)向下取整,返回小于或等于 x 的最大整数
GREATEST(expr1, expr2, …)返回列表中的最大值
LEAST(expr1, expr2, …)返回列表中的最小值
LOG2(x)返回以 2 为底的对数
LOG10返回以10为底的数字的自然对数
LOG返回一个数字的自然对数
MOD(x,y)返回 x 除以 y 以后的余数
PI()返回圆周率(3.141593)
POW(x,y)返回 x 的 y 次方
POWER(x,y)返回 x 的 y 次方
RADIANS(x)将角度转换为弧度
RAND生成一个0~1之间的随机数,传入整数参数是,用来产生重复序列
ROUND对所传参数进行四舍五入
SIGN返回参数的符号
SIN求正弦值
SQRT求二次方根
TAN(x)求正切值
TRUNCATE(x,y)返回数值 x 保留到小数点后 y 位的值

三、日期时间函数

3.1 日期时间格式化

DATE_FORMAT(date,format)

根据format字符串格式化date值,在format字符串中可用标志符。具体的参数如下:

format含义
%a工作日的缩写名称(Sun~Sat)
%b月份的缩写名称(Jan…Dec)
%c月份,数字形式(0~12)
%D带有英语后缀的该月日期(0th, 2st, 3nd,…)
%d该月日期,数字形式(00~31)
%e该月日期,数字形式((0~31)
%f微秒(000000 …999999)
%H以 2 位数表示 24 小时(00~23)
%h, %I以 2 位数表示 12 小时(01~12)
%i分钟,数值(00-59)
%j—年中的天数(001~366)
%k以 24 小时(0~23)表示
%l以12小时(1~12)表示
%M月份名称(January~December)
%m月份,数字形式(00~12)
%p上午(AM) 或下午(PM)
%r时间,12小时制(小时 (hh): 分钟 (mm) : 秒数 (ss) 后加 AM 或 PM)
%S, %s以 2 位数形式表示秒(00~59)
%T时间,24 小时制(小时 (hh): 分钟 (mm): 秒数 (ss))
%U周(00~53),其中周日为每周的第一天
%u周(00~53),其中周一为每周的第一天
%V周(01~53),其中周日为每周的第一天,和%X同时使用
%v周(01~53),其中周一为每周的第一天,和%x同时使用
%W星期标识(周日、周一、周二…周六)
%w—周中的每日(0= 周日…6= 周六)
%X该周的年份,其中周日为每周的第一天,数字形式,4 位数,和%V同时使用
%x该周的年份,其中周一为每周的第一天,数字形式,4位数,和%v同时使用
%Y4 位数形式表示年份
%y2 位数形式表示年份

具体执行结果如下:

select DATE_FORMAT('2022-12-11 00:22:30','%Y/%m/%d');
select DATE_FORMAT('2022-12-11 00:22:30','%Y%m%d');
select DATE_FORMAT('2022-12-11 00:22:30','%m');
select DATE_FORMAT('2022-12-11 00:22:30','%H');

3.2 日期函数

函数名称作 用
CURDATE()当前系统的日期
CURRENT_DATE()返回当前日期
CURRENT_TIME返回当前系统的时间
CURRENT_TIMESTAMP()返回当前日期和时间
CURTIME()返回当前时间
DATE_FORMAT格式化指定的日期,根据参数返回指定格式的值
DATE()从日期或日期时间表达式中提取日期值
DATEDIFF(d1,d2)获取两个日期之间间隔,返回参数 1 减去参数 2 的值
DAY(date)返回日期值 d 的日期部分
DAYNAME(d)获取指定曰期对应的星期几的英文名称
DAYOFMONTH(d)获取指定日期是一个月中是第几天,返回值范围是1~31
DAYOFWEEK(d)获取指定日期对应的一周的索引值,1 星期日,2 星期一,以此类推
DAYOFYEAR(d)获取指定曰期是一年中的第几天,返回值范围是1~366
FROM_DAYS(n)计算从 0000 年 1 月 1 日开始 n 天后的日期
FROM_UNIXTIME将 UNIX 时间戳转换为时间格式,与UNIX_TIMESTAMP互为反函数
HOUR(time)返回 t 中的小时值,返回值的范围是 0 到 23
LAST_DAY(d)返回给给定日期的那一月份的最后一天
LOCALTIME()返回当前日期和时间
LOCALTIMESTAMP()返回当前日期和时间
MAKETIME(hour, minute, second)组合时间,参数分别为小时、分钟、秒
MINUTE(time)返回 t 中的分钟值,范围是 0 到 59
MONTH(date)获取指定日期中的月份,范围为 1 到 12
MONTHNAME获取指定日期中的月份英文名称
NOW()返回当前系统的日期和时间值
PERIOD_ADD(period, number)为 年-月 组合日期添加一个时段
PERIOD_DIFF(period1, period2)返回两个时段之间的月份差值
QUARTER(d)返回日期的一年中的季度,范围为 1 到 4
SEC_TO_TIME(s)将以秒为单位的时间 s 转换为时分秒的格式,与TIME_TO_SEC 互为反函数
SECOND(time)返回 t 中的秒钟值,范围为 0 到 59
STR_TO_DATE(string, format)将字符串转变为日期
SUBDATE(d,n)日期 d 减去 n 天后的日期
SUBTIME(t,n)时间减法运算,时间 t 减去 n 秒的时间
SYSDATE()返回当前日期和时间
TIME_FORMAT(t,f)按表达式 f 的要求显示时间 t
TIME_TO_SEC将时间参数转换为秒数
TIME(expression)提取传入表达式的时间部分
TIMEDIFF(time1, time2)计算时间差值
TO_DAYS(d)计算日期 d 距离 0000 年 1 月 1 日的天数
UNIX_TIMESTAMP获取UNIX时间戳函数
WEEK(d)获取指定日期是一年中的第几周,返回值的范围是否为 0〜52 或 1〜53
WEEKDAY(d)获取指定日期在一周内对应的工作日索引,0 表示星期一,1 表示星期二
WEEKOFYEAR(d)计算日期 d 是本年的第几个星期,范围是 0 到 53
YEAR(d)获取年份,范围为 1000 到 9999
YEARWEEK(date, mode)返回年份及第几周(0到53),mode 中 0 表示周天,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);

3.3 日期函数加减运算

函数名称作 用
ADDDATE(date,INTERVAL expr unit)向日期添加指定的时间间隔
ADDTIME(date,INTERVAL expr unit)时间加法运算,在原始时间上添加指定的时间
DATE_ADD(date,INTERVAL expr unit)向日期添加指定的时间间隔
DATE_SUB(date,INTERVAL expr unit)向日期减去指定的时间间隔

  这里简单介绍其中的参数含义,date 参数指定开始日期或日期时间值。 expr 是一个表达式,指定要从开始日期添加或减去的间隔值,而unit则指明表达式expr应该如何被解释,其值为

unit值说明expr 格式
secondseconds
minute分钟minutes
hour小时hours
dayday
monthmonth
yearyear
minute_second分钟和秒minutes:seconds
hour_minute小时和分钟hours:minutes
day_hour天和小时hours hours
day_minute天、小时、分钟hours hours:minutes
day_second天、小时、分钟、秒hours hours:minutes:seconds
year_month年和月year-month

具体用法如下:

select DATE_ADD('2022-12-11' ,INTERVAL 1 DAY);
select DATE_ADD('2022-12-11' ,INTERVAL 1 MONTH);
select DATE_ADD('2022-12-11' ,INTERVAL -1 DAY);

3.4 关于时间的查询

  • 获取年月日时分秒周
SELECT now(),dayofweek(now()),YEAR(now()),MONTH(now()),DAY(now()),HOUR(now()),MINUTE(now()),SECOND(now()),WEEK(now());
  • 结合某表的常用查询
-- 今天
select * from sys_log_login where to_days(createTime) = to_days(now());
-- 查询最近一周的数据
select * from sys_log_login where DATE_SUB(CURDATE(), INTERVAL 7 DAY) <= date(createTime);
-- 查询上一周数据
SELECT * FROM sys_log_login WHERE YEARWEEK(date_format(now() ,'%Y-%m-%d'))= YEARWEEK(now()) -1
-- 近30天
SELECT *FROM sys_log_login  where DATE_SUB(CURDATE(), INTERVAL 30 DAY) <= date( createTime)
-- 查询最近一月的数据
select * from sys_log_login where DATE_SUB(CURDATE(), INTERVAL 1 MONTH) <= date(createTime);
-- 查询本月数据
SELECT * FROM sys_log_login WHERE DATE_FORMAT(createTime, '%Y%m')=DATE_FORMAT(CURDATE() , '%Y%m')
-- 查询上一月数据
SELECT * FROM sys_log_login WHERE PERIOD_DIFF(date_format(now() ,'%Y%m'), date_format(createTime ,'%Y%m'))=1
-- 查询本年数据
select * from `sys_log_login` where YEAR(createTime)=YEAR(NOW());
-- 查询上一年数据
select * from `sys_log_login` where year(createTime)=year(date_sub(now(),interval 1 year));
-- 按日查询
SELECT DATE_FORMAT(createTime, '%Y-%m-%d') AS time,COUNT(*) FROM sys_log_login GROUP BY time
-- 按周查
SELECT DATE_FORMAT(createTime, '%Y-%u') AS time,COUNT(*) FROM sys_log_login GROUP BY time
-- 按月查
SELECT DATE_FORMAT(createTime,'%Y-%m') AS time,COUNT(*) FROM sys_log_login GROUP BY time
-- 按年查
SELECT DATE_FORMAT(createTime,'%Y') AS time,COUNT(*) FROM sys_log_login GROUP BY time
-- 按月分组查询
SELECT
	SUM(case MONTH(createTime) WHEN 1 THEN 1 ELSE 0 END) AS 一月份,
	SUM(case MONTH(createTime) WHEN 2 THEN 1 ELSE 0 END) AS 二月份,
	SUM(case MONTH(createTime) WHEN 3 THEN 1 ELSE 0 END) AS 三月份,
	SUM(case MONTH(createTime) WHEN 4 THEN 1 ELSE 0 END) AS 四月份,
	SUM(case MONTH(createTime) WHEN 5 THEN 1 ELSE 0 END) AS 五月份,
	SUM(case MONTH(createTime) WHEN 6 THEN 1 ELSE 0 END) AS 六月份,
	SUM(case MONTH(createTime) WHEN 7 THEN 1 ELSE 0 END) AS 七月份,
	SUM(case MONTH(createTime) WHEN 8 THEN 1 ELSE 0 END) AS 八月份,
	SUM(case MONTH(createTime) WHEN 9 THEN 1 ELSE 0 END) AS 九月份,
	SUM(case MONTH(createTime) WHEN 10 THEN 1 ELSE 0 END) AS 十月份,
	SUM(case MONTH(createTime) WHEN 11 THEN 1 ELSE 0 END) AS 十一月份,
	SUM(case MONTH(createTime) WHEN 12 THEN 1 ELSE 0 END) AS 十二月份
FROM sys_log_login
WHERE
	YEAR(createTime) = YEAR(CURDATE())

四、聚合函数

  聚合函数又称为组函数,一般结合分组进行使用,用来统计和计算,比如不想知道每条学生记录的确切信息,只想知道学生记录数量。聚合函数在平常的sql中十分常用,不需要查阅文档就应该保证熟练使用,这里列举如下:

函数名称作 用
AVG(expression)返回一个表达式的平均值
COUNT(expression)返回由 SELECT 语句检索的行中 expr 的非 NULL 值的计数
GROUP_CONCAT()将group by产生的同一个分组中的值连接起来,返回一个字符串结果
MAX(expression)返回字段 expression 中的最大值
MIN(expression)返回字段 expression 中的最小值
SUM(expression)返回指定字段的总和

需要注意的是,聚合函数不会对null值进行计算。由于它会略过null值,具体业务情况需要酌情分析。

这里主要来看下 GROUP_CONCAT 函数的使用,如下所示:

select date,GROUP_CONCAT(sales) from order_details group by date order by date limit 10;

+------------+-------------------------------+
| date       | GROUP_CONCAT(sales)           |
+------------+-------------------------------+
| 2019-01-01 | 39,44,37,38,88,87,6,21,91,78  |
| 2019-01-02 | 70,12,63,52,80,35,14,88       |
| 2019-01-03 | 16,76,48                      |
| 2019-01-04 | 42,69,99,85,49,37             |
| 2019-01-05 | 63,61,50,1,100,33,60,59,90,48 |
| 2019-01-06 | 66,66,49,14,38,94,78,16,68    |
| 2019-01-07 | 30,51,13,27,58,82,75,12       |
| 2019-01-08 | 71,50,67,46,91                |
| 2019-01-09 | 62,76,51,100,11,28,32         |
| 2019-01-10 | 13,72,38,42,67,94,76          |

五、控制流程函数

MySQL有4个函数是用来进行条件操作的,这些函数可以实现SQL的条件逻辑,允许开发者将一些应用程序业务逻辑转换到数据库后台。

函数名称作 用
IF(expr,v1,v2)如果表达式 expr 成立,返回 v1,否则返回 v2
IFNULL(v1,v2)如果 v1 的值不为 NULL,则返回 v1,否则返回 v2
NULLIF(arg1,arg2)如果arg1=arg2返回NULL;否则返回arg1
case
when <求值表达式> then <表达式1>
when <求值表达式> then <表达式2>
else <表达式>
end
如果testN是真,则返回resultN,否则返回default
当一个case子句中有多个判断逻辑时、字段类型需要一致。
case <表达式>
when <求值表达式> then <表达式1>
when <求值表达式> then <表达式2>
else <表达式>
end
如果test和valN相等,则返回resultN,否则返回default
当一个case子句中有多个判断逻辑时、字段类型需要一致。
ISNULL(expression)判断表达式是否为 NULL

这里举个完整的示例,我们先看原始数据:

idagesexnamescore
1220周蓉91
2180周秉昆45
3251周秉义92
4221蔡晓光82
5240郝冬梅82
6170乔春燕56
7210郑娟38
8181郝德宝61

统计优秀、良好、合格、不合格人数。

select  
case
	when  score>=90 then '优秀' 
	when  score>=80 and score <90 then '良好'
	when  score>=60 and score<80 then '合格'
	when  score<60 then '不合格'
end as type,count(*) as '人数' from t_score group by type;

六、系统信息函数

  系统信息函数用来查询MySQL数据库的系统信息。例如,查询数据库的版本,查询数据库的当前用户等。本小节将详细讲解系统信息函数的作用和使用方法。

函数名称作用
VERSION()获取MySQL版本号、连接数、数据库名
CONNECTION_ID()获取服务器的连接数,也就是到现在为止MySQL服务的连接次数
DATABASE()获取当前数据库名
SCHEMA()获取当前数据库名
USER()获取当前用户的名称
SYSTEM_USER()获取当前用户的名称
SESSION_USER()获取当前用户的名称
CURRENT_USER()获取当前用户的名称
CHARSET(str)获取字符串str的字符集,一般情况就是系统的默认字符集
COLLATION(str)获取字符串str的字符排列方式
LAST_INSERT_ID()获取最后生成的AUTO_INCREMENT值

七、加密函数

  加密函数是MySQL中用来对数据进行加密的函数。因为数据库中有些很敏感的信息不希望被其他人看到,就应该通过加密方式来使这些数据变成看似乱码的数据。例如用户的密码,就应该经过加密。下面是各种加密函数的名称、作用和使用方法。

函数名称作用
PASSWORD(str)对字符串str进行加密。一般情况下,主要是用来给用户密码加密的
MD5(str)主要对普通的数据进行加密
ENCODE(str,pswd_str)使用字符串pswd_str来加密字符串str
DECODE(crypt_str,pswd_str)使用字符串pswd_str来为crypt_str解密
SHA()计算字符串str的安全散列算法(SHA)校验和
SELECT ENCODE('xufeng','key');
SELECT DECODE(ENCODE('xufeng','key'),'key');#加解密放在一起
SELECT MD5('123456');
SELECT SHA('123456');

八、其它函数

函数名称作 用
CAST(expression AS data_type)用于将某种数据类型的表达式显式转换为另一种数据类型
  • 2
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 1
    评论
MySQL常用函数有很多,包括数字函数、字符串函数、日期函数以及MySQL高级函数等等。在MySQL的帮助文档中可以找到详细的介绍和示例。以下是一些常用MySQL函数: 1. 数字函数:包括ABS()、ROUND()、CEIL()、FLOOR()等,用于对数字进行各种运算和取整操作。 2. 字符串函数:包括CONCAT()、UPPER()、LOWER()、SUBSTRING()等,用于对字符串进行各种操作,如拼接、大小写转换、截取等。 3. 日期函数:包括NOW()、CURDATE()、DATE_FORMAT()、DATE_ADD()等,用于处理日期和时间相关的操作,如获取当前日期时间、格式化日期、日期计算等。 4. 类型转换函数:包括CAST()、CONVERT()等,用于将一个值转换为指定的数据类型,如将字符串转换为整数、将日期转换为字符串等。 总的来说,MySQL提供了丰富的函数库来满足不同的需求,可以根据具体的功能需求选择合适的函数进行操作。<span class="em">1</span><span class="em">2</span><span class="em">3</span> #### 引用[.reference_title] - *1* [MySQL常用函数大全(总结篇)](https://blog.csdn.net/zeng_ll/article/details/87706409)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v92^chatsearchT0_1"}}] [.reference_item style="max-width: 50%"] - *2* *3* [MySQL常用函数](https://blog.csdn.net/coco3600/article/details/100231943)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v92^chatsearchT0_1"}}] [.reference_item style="max-width: 50%"] [ .reference_list ]

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

独泪了无痕

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值