♂️作者简介:生鱼同学,大数据科学与技术专业硕士在读,曾获得华为杯数学建模国家二等奖,MathorCup 数学建模竞赛国家二等奖,亚太数学建模国家二等奖。
✍️研究方向:复杂网络科学
兴趣方向:利用python进行数据分析与机器学习,数学建模竞赛经验交流,网络爬虫等。
在本节中,我们将介绍MySQL中的内置函数,在介绍内置函数之前,首先我们来看一下函数的定义:
函数:指一段可以直接被另一端程序调用的程序或代码。
在本文中我们将介绍几种主流的常用的函数,话不多说,我们开始吧。
常见的字符串函数如下所示:
函数 | 功能 |
---|---|
CONCAT(S1,S1…Sn) | 字符串拼接,将S1,S1…Sn拼接 |
LOWER(str) | 将str全部转换为小写 |
UPPER(str) | 将str全部转换为大写 |
LPAD(str,n,pad) | 左填充,用pad对str左边进行填充,达到n个字符长度 |
RPAD(str,n,pad) | 右填充,用pad对str右边进行填充,达到n个字符长度 |
TRIM(str) | 去掉字符串头部和尾部的空格 |
SUBSTRING(str,start,len) | 返回从字符串str从start位置起的len长度的字符串 |
当我们希望使用CONCAT进行拼接的时候,我们需要在函数的参数内输入我们需要拼接的字符,例如我们想要拼接字符’HELLO’,‘SQL!’'的时候,我们可以使用下面的语句:
SELECT CONCAT('HELLO','SQL!');
当我们希望对字符串进行大小写转换的操作时,可以使用LOWER&UPPER这两个字符串函数,例如当我们想要对Hello进行大小写的操作时,可以使用下面这两条语句:
SELECT LOWER('Hello');
SELECT UPPER('Hello');
在我们希望对某个字符串进行填充的时候,可以使用上面两个函数,例如当我们想对字符串填充某个字符的时候,可以使用下面的操作:
# 在01的左侧添加-直到其长度为5
SELECT LPAD('01',5,'-');
# 在01的右侧添加-直到其长度为5
SELECT RPAD('01',5,'-');
当我们需要去掉字符串头部和尾部的空格的时候,我们可以使用TRIM函数进行操作,例如我们需要对’ hello world! '进行操作的时候可以使用下面的语句:
SELECT TRIM(' hello world! ');
结果如下:
注意:这里的前后的空格已经被去除,但是中间的空格并不会受到影响。
当我们想要对字符串进行类似切片的操作的时候,可以使用SUBSTRING进行,例如当我们需要对’HELLO TOM AND JERRT’截取只要中间的部分的时候,我们可以利用下面的代码:
SELECT SUBSTRING('HELLO TOM AND JERRT',7,3);
在实际应用中,假设我们有一张员工表格需要我们对id进行处理对其填充,这时我们就可以利用上述的函数进行操作。代码如下所示:
UPDATE TABLENAME SET ID = LPAD(ID,5,'-');
在使用上述代码前,表的内容状态为:
使用上述操作后,表格状态如下:
常见的数值函数如下所示:
函数 | 功能 |
---|---|
CEIL(X) | 向上取整 |
FLOOR(X) | 向下取整 |
MOD(X,Y) | 返回X,Y的模 |
RAND() | 返回0-1内的随机数 |
ROUND(X,Y) | 求参数的四舍五入,保留Y位小数 |
当我们希望对数值进行取整操作时可以使用上述的两个函数,分别为向上取整和向下取整,代码如下:
# 向上取整
SELECT CEIL(1.7);
# 向下取整
SELECT FLOOR(1.7);
当我们想对数值取模的时候,可以使用MOD函数,例如我们可以使用下面的代码:
SELECT MOD(7,5);
RAND可以为我们取0-1之间的随机数,可以使用下面代码操作:
SELECT RAND();
ROUND的作用与python中的作用相同,可以使用其来进行数值的小数位置的操作,其会对指定位数的小数进行四舍五入,代码如下:
SELECT ROUND(1.738,2);
日期函数中常用的如下:
函数 | 功能 |
---|---|
CURTIME() | 获取当前的时间 |
CURDATE() | 获取当前的日期 |
NOW() | 获取当前的日期和时间 |
YEAR(date) | 获取指定日期的年份 |
MONTH(date) | 获取指定日期的月份 |
DAY(date) | 获取指定日期的日期 |
DATE_ADD(date, INTERVAL expr type) | 指定一个时间date返回加上一个expr之后的时间 |
DATEDIFF(date1,date2) | 获取两个时间的差值 |
使用上述三个函数,可以分别获取当天的日期,时间和现在的日期和时间,代码如下所示:
# 获取当前时间
SELECT CURTIME();
# 获取当前日期
SELECT CURDATE();
# 获取当前日期和时间
SELECT NOW();
使用上述三个函数可以获取某个时间的年,月,日,代码如下:
# 获取当前时间的年
SELECT YEAR(NOW());
# 获取当前时间的月
SELECT MONTH(NOW());
# 获取当前时间的日
SELECT DAY(NOW());
结果如下:
当我们需要对时间进行加减的时候可以使用上面的函数,例如我们希望对现在的时间加上30天之后的日期,可以使用下面的操作:
SELECT DATE_ADD(NOW(), INTERVAL 30 DAY);
当我们关心两个日期之间的差值的时候,可以使用上面的代码,例如我们希望获取到当前时间和2027-5-1相差的时间可以使用下面的操作:
SELECT DATEDIFF(NOW(),'2027-5-1');
结果如下:
注意:这里所求的的差异是第一个时间减去第二个时间,所以是负的
主要使用的流程控制函数如下所示:
函数 | 作用 |
---|---|
IF(value , t , f) | 如果value为true,则返回t,否则返回f |
IFNULL(value1, value2) | 如果value1不为空,返回value1,否则返回value2 |
CASE WHEN [ val1 ] THEN [res1] … ELSE [ default ] END | 如果val1为true,返回res1,… 否则返回default默认值 |
CASE[ expr] WHEN [val1 ] THEN [res1] … ELSE[ default ] END | 如果expr的值等于val1,返回res1,… 否则返回default默认值 |
如果你学过其它语言,那么你对IF的作用肯定是不陌生的,我们来看下面这两个代码:
# 此时的value为False应该会返回'False'
SELECT IF(False, 'TURE' , 'False');
# 此时第一个位置是一个空字符串,但是不是空,所以应该返回‘ ’
SELECT IFNULL('' , 'False');
# 此时第一个位置为null,所以应该返回False
SELECT IFNULL(null , 'False');
为了更好的演示两种CASE的用法,我们这里使用一个例子,假设我们需要查看员工表的员工年龄是否已经超过了18岁成年,我们可以使用下面的语句:
SELECT
NAME,
(CASE WHEN AGE >= 18 THEN '成年' ELSE '未成年' END) '成年与否'
FROM tb_user;
接下来我们看另一种CASE的用法,假设我们希望查询表中的性别,当性别为男的时候展示帅哥,性别为女展示美女,我们可以使用下面的操作:
SELECT
NAME,
(CASE gender WHEN '男' THEN '帅哥' ELSE '美女' END) '帅哥还是美女'
FROM tb_user;
本次列举了SQL中常用的函数的相关语句,在实际学习的过程中还需要多学习以及使用才能熟练掌握。
余下的SQL内容我也将持续更新,如果感兴趣的话不妨订阅本专栏或者点个关注,我们下次再见。