目录
5)insert(str,start,len,'replace') 该函数用于查找包含字串的字段
7)lpad(str,len,填充字符)、rpad(str,len,填充字符),左填充右填充,直到长度达到len
10)date_add(日期,interval num 时间)函数
12)datediff(end_date,start_date)函数
13)timestampdiff(unit,start_date,end_date)函数
一、MySQL函数介绍
MySQL数据库中提供了很丰富的函数。mysql函数包括数学函数、字符串函数、日期和时间函数、条件判断函数、系统信息函数、加密函数、格式化函数等。通过这些函数,可以简化用户的操作。
二、MySQL函数分类
1、字符串函数详解
函数名称 | 函数的用法 |
---|---|
length(str) | 该函数用于计算字段长度 |
concat(str1,str2,...) | 该函数用于字段的连接 |
upper(str)、lower(str) | 该函数用于字符串大小写的转换,顾名思义upper就是大写的转换,lower则是小写的转换 |
substr(str,start,len) | 该函数用于字符串的截取,start表示截取开始的位置,注意这里的位置从1开始,len则表示截取的长度 |
insert(str,start,length,'replace‘) | 该函数指定替换内容 |
trim(str) | 该函数用于去除字符串两端的空格内容 |
lpad(str,len,填充字符)、rpad(str,len,填充字符) | 看到pad就联想到padding,顾名思义填充,左填充,右填充,直到长度达到len的长度 |
replace(str,指定替换的字串,替换内容) | 该函数用于指定去替换字符串内容 |
1)length(str)实例
-- length(str) 该函数用于计算字段长度
select length('Only I known you!') as '我想你';
2)concat(str1,str2,...)实例
-- concat(str1,str2,...) 该函数用于字段的连接
select concat('你说你爱我!', '尊嘟假嘟!') as '张万森';
3)upper(str)、lower(str)实例
-- upper(str)、lower(str) 该函数用于字符串大小写的转换,顾名思义upper就是大写的转换,lower则是小写的转换
select upper('i love you sjw!') as 'yp一直没变';
4)substring(str,start,len)实例,
-- substring(str,start,len) 该函数用于字符串的截取,start表示截取开始的位置,len则表示截取的长度
select substring('你不会忘记我对吧!',4,3) as 'sjw';
5)insert(str,start,len,'replace') 该函数用于查找包含字串的字段
-- insert(str,start,len,'replace') 该函数用于查找包含字串的字段
select insert('我想你',2,1,'喜欢') as '真话';
6)trim(str)实例
-- trim(str) 该函数用于去除字符串两端的空格内容
select trim(' 长话短说 ') as '哈哈!';
7)lpad(str,len,填充字符)、rpad(str,len,填充字符),左填充右填充,直到长度达到len
-- lpad(str,len,填充字符)、rpad(str,len,填充字符) 看到pad就联想到padding,顾名思义填充,左填充,右填充
select lpad('12', 4, '0') as '员工编号';
select rpad('12', 4, '0') as '员工编号';
8)replace(str,子串,另一个字符串)实例
-- replace(str,指定替换字串,替换内容) 该函数用于指定去替换字符串内容
select replace('我讨厌你','讨厌','喜欢') as '别憋着';
2、数学函数
函数名称 | 函数的用法 |
---|---|
round(x,保留位数) | 根据我们所取的位数来进行四舍五入保留小数 |
ceil(x) | 在英文中,ceil是天花板的意思,有向上的意思,所以,此函数是向上取整,他返回的是大于或等于函数参数,并且与之最接近的整数。 向上取整的时候,整数,则直接将当前整数加一;负数,则将整数后边的数据抹除;整数,则不变,把它想象成数轴就好。 |
floor(x) | 在英文中,floor是地面,地板的意思,有下面的意思,所以,此函数是向下取整,他返回的是小于或等于函数参数,并且与之最接近的整数。 向下取整的时候,正数,则取其整数部位,抹除小数部位;负数,则取其整数加一;整数,则不变 |
truncate(x,D) | 在英文中,译为截断,它的作用是将数据库中的某个字段的字符串截断到指定的长度。他有一些重要的用途,比如解决字段内容过长的问题、提高查询效率以及减少存储空间。 |
mod(被除数,除数) | 求余函数,这个函数得作用是求余,可以使用小数(测试过程中能使用到) |
pow(x,D) | 用于计算指数函数 |
1)round(x,保留位数)函数
-- 第二部分,数字处理部分
-- round(x,保留位数)
select round(4.567,2) as 'result';
select round(4.56734,2) as 'result';
select round(4.56734,4) as 'result';
2)ceil(x)函数
-- ceil(x) 向上取整,想象成数轴就好
select ceil(4.56) as 'result';
select ceil(4.46) as 'result';
select ceil(4.36) as 'result';
select ceil(3.56) as 'result';
select ceil(-3.56) as 'result';
3)floor(x)函数
-- floor(x) 向下取整,也是想象成数轴就好
select floor(4.56) as 'result';
select floor(-4.56) as 'result';
4)truncate(x,D)函数
-- truncate(x,D) 截断函数,根据我们所取得长度来取得我们对应得长度
select truncate(3.45578, 3) as 'result';
select truncate(3.45578, 7) as 'result';
5)mod(被除数,除数)函数
-- mod(被除数,除数) 求余函数,提示给出只能给两个整数,但是我在这里可以使用小数,就以实际得操作为主
select mod(10, 3) as 'result';
select mod(113.5, 3) as 'result';
select mod(113.556, 3) as 'result';
select mod(10, 2) as 'result';
select mod(53,4) as 'result';
离线数仓/实时数仓
6)pow(x,D)函数
-- pow(x,D) 用于计算指数函数
select pow(2,3) as 'result';
select pow(2.2,3) as 'result';
select pow(-2.35,3) as 'result';
这里有一个神奇的现象,计算指数函数之后,我们的值结果失真了。我查到资料再回来看看!
3、日期函数
函数名称 | 函数说明 |
---|---|
now() | 返回当前的日期和时间 |
curdate() | 返回当前的日期 |
curtime() | 返回当前的时间 |
weekofyear() | 根据传入的日期,计算出当前时间在当前所在年份的第几个星期 |
quarter() | 函数返回一个指定日期所在季度值,QUARTER(date)参数date是必需的,所以它的返回值介于1~4之间 |
str_to_date() | str_to_date()函数扫描输入字符串以匹配格式字符串。格式字符串可以包含文字字符和以百分比(%)字符开头的格式说明。查看DATE_FORMAT函数以获取格式说明列表。 |
date_format(date,format) | 将当前的日期转换成对应的字符串形式 |
date_add(日期,interval num 时间单位) | 在输入的日期的基础上,对其进行操作,可以使用表达式interval +/- num 时间单位,可以是分时日月周年 |
last_day() | 计算当期日期的当月的最后一天的日期是多少 |
datediff(edd_date,start_date) | 计算两个日期之间的天数差,前减后 |
timetampdiff(unit,start_date,end_date) | unit参数是计算的单位,可以是基本的分时日月周,表示为整数,其中start_date,和end_date是DATE或DATETIME的表达式。 |
1)now()函数
-- now() 返回当前的日期和时间
select now() as 'result';
2)curdate()函数
-- curdate() 返回当前的日期,格式为YYYY-MM-DD
select curdate() as 'result';
3)curtime()函数
-- curtime() 返回当前的时间
select curtime() as 'result';
4)weekofyear()函数
-- weekofyear() 根据传入的日期,计算出当前时间在当前年份所在的第几个星期
select weekofyear('2023-01-07') as 'result';
5)quarter()函数
-- quarter() 函数返回一个指定日期所在季度值,QUARTER(date)参数date是必需的,所以它的返回值介于1~4之间
select quarter('2023-01-07') as 'result';
select quarter('2023-09-02 21:23:19') as 'result';
6)str_to_date()函数
-- str_to_date() 函数返回
select str_to_date('2023,09,02','%Y,%m,%d') as 'result';
select str_to_date('2023-09-02','%Y-%m-%d') as 'result';
select str_to_date('2023,09','%Y,%m,%d') as 'result';
select str_to_date('09','%Y,%m,%d') as 'result'; -- 这里会将第一进行匹配,其他的按照默认值处理
7)date_format()函数
-- date_format(data,format) 跟str_to_date相反,他是把日期时间转换成其他的字符
select date_format('2023-09-02 21:23:19', '%y-%m-%d') as 'result';
select date_format('2023-09-02 21:23:19', '%y,%m,%d') as 'result';
8)date_add(日期,interval num 时间单位——可以是基本的年月日时分)函数
/*
-- date_add(日期,interval num 时间)
select date_add('2023-09-02 21:23:19','4:4:4') as 'result';
1. 将一个日期加上10天:
SELECT date_add('2022-01-01', INTERVAL 10 DAY);
结果:2022-01-11
2. 将一个时间加上2小时:
SELECT date_add('2022-01-01 12:00:00', INTERVAL 2 HOUR);
结果:2022-01-01 14:00:00
3. 将一个日期时间加上1个月:
SELECT date_add('2022-01-01 12:00:00', INTERVAL 1 MONTH);
结果:2022-02-01 12:00:00
*/
-- 将一个日期减去7天:
SELECT date_add(now(), INTERVAL -7 DAY);
9)last_day()函数
-- last_day() 计算当月最后一天是什么时候
select last_day(now()) as 'result';
10)datediff(end_date,start_date)函数
-- datediff(edd_date,start_date) 计算两个日期之间的天数差,前减后
select datediff(now(),date_add(now(),interval -7 day)) as 'result';
select datediff(now(),date_add(now(),interval +7 day)) as 'result';
11)timestampdiff(unit,start_date,end_date)函数
-- timestampdiff(unit,start_date,end_date)
select timestampdiff(now(),'2023-9-4') as 'result';
-- 以下示例将以月份值的形式返回2018-01-01和2018-06-01的差值:
SELECT TIMESTAMPDIFF(MONTH, '2018-01-01', '2018-06-01') result;
4、流程控制函数
1)if(expr,v1,v2)函数
2)ifnull()函数
3)case…when函数的三种用法
5、系统信息函数
系统信息函数 | 函数说明 |
---|---|
version() | 查看MySQL的版本函数 |
connection_id() | 该函数用于返回MySQL中当前连接的连接ID。用于建立与数据库的连接的连接ID对于所连接的客户端之间的每个连接 都是唯一的。且该函数不需要任何的参数。 |
schema()/database() | 显示当前所使用到的数据库 |
user()/current_user()/system_user() | 显示当前使用用户 |
1)version()函数
2)connection_id()函数
3)schema()/database()函数
5)user(),current_user(),system_user()函数
select user();
select current_user();
select system_user();
6、聚合函数
1)功能与分类
2)聚合函数的传入参数,数据类型
7、其他函数
函数名称 | 函数描述 |
---|---|
format(N,D,[locate]) | 该函数用于帮助格式化给定的数字格式,例如“#,###,###.#”,将他们四舍五入到特定的小数点,然后以字符串的形式返回结果 N:要格式化的数字 D:四舍五入到的小数位数 locate:这是一个可选参数,他决定的是一千个分隔符以及分隔符之间的分组。默认情况下,MySQL中存在en_US语言环境。 |
INET_ATON(IP) | 将IP地址转换为数字 |
INET_NTOA(NUM) | 将数字转换为IP |
password(str) | 该函数是一个加密函数,用于将字符串加密为一个40个字符的字符串,是单向加密函数 |
md5(str) | md5是一种加密方法,可以将数据进行加密 |
encode(str,pswd_str)/decode(加密的字符串,pswd_str) | 该函数是用来对字符串来进行编码和解码的操作 |
1)FORMAT(x,y)函数
/*
FORMAT(X,D [locale])函数
1. X: 需要格式化的数字或日期类型的数据。注意,该参数必须是表达式,并返回任何数字或日期值。可以是常量、变量或其他函数的结果。如果值为零,则无需指定正负号。
2. D: 小数点后面的位数。最大允许精度为30位,小于1位的值将被视为0。
3. locale: 可选参数。语言/本地环境,使用一种特定的国家/地区设置格式数字值。可以使用' en_US '表示美国典型的货币和数字格式。默认情况下,根据系统语言环境来确定。
*/
-- 1. 格式化数值类型的数据
-- 我们先来看一个简单的例子,将一个数字格式化成小数点后保留两位,例如格式化前的数字为:12345.6789,我们要将其格式化为:12,345.68,代码如下:
SELECT FORMAT(12345.6789, 2);
-- 2. 在这个例子中,我们使用了NOW()函数来获取当前日期和时间,然后将其格式化为所需的字符串格式。
SELECT FORMAT(NOW(), 'YYYY-DD-MM HH:MM:SS');
-- 3. 格式化货币类型的数据除了数字和日期类型,我们还可以使用format函数格式化货币类型的数据。例如,将一个数字格式化为货币格式,小数点后保留2位,带有货币符号“$”,我们可以使用如下代码:
SELECT FORMAT(12345.6789, 2, 'en_US');
2)INET_ATON(ip)函数
例如:
IP地址:66.102.7.147
计算公式: 66*256^3+102*256^2+7*256+147=1113982867
cmd命令行中输入:" ping 111392867"能PIN通(前提:IP地址是真实的)
/*
INET_ATON函数是MySQL中的网络工具函数之一,用于将IP地址转换为整数表示。
例如:INET_ATON('192.168.0.1'),运行结果将返回整数值3232235521。
INET_ATON函数接收一个字符串类型的参数,该参数必须是一个合法的IPv4地址。
例如:INET_ATON('192.168.0.1')和INET_ATON('255.255.255.255')是合法的参数,而INET_ATON('')和INET_ATON('192.168.0.256')是不合法的参数。
INET_ATON函数的作用不仅仅局限于将IPv4地址转换为整数值,还可以在MySQL中进行IP地址的范围查询。
例如:SELECT * FROM users WHERE INET_ATON('192.168.0.1') BETWEEN INET_ATON(start_ip) AND INET_ATON(end_ip)。
上面的SQL语句将返回所有start_ip和end_ip范围内包含IPv4地址192.168.0.1的用户。
需要注意的是,INET_ATON函数只能将IPv4地址转换为整数表示,如果需要将整数表示的IP地址转换为字符串形式,则需要使用INET_NTOA函数。
例如:INET_NTOA(3232235521),将返回字符串'192.168.0.1'。
通过使用INET_ATON和INET_NTOA函数,可以在MySQL中轻松地实现IPv4地址的转换和查询。
*/
SELECT inet_aton('192.168.75.188') as 'result';
3)INET_NTOA(NUM)函数
-- INET_NTOA(NUM)函数
select inet_ntoa(3232254908) as 'result';
4)password(str)函数
5)md5(str)函数
-- md5(str)函数
select md5('i love you') as 'result';
6)encode(str,pswd_str)、decode(加密的字符串,pswd_str)函数
MySQL8版本这两个方法应该弃用了,可能老版本有!