上篇文章给大家介绍了多表连接查询以及嵌套查询,包括内连接和外连接,也介绍了子查询,包括in以及any等关键字的用法。最后分别通过案例对这部分知识点进行了讲解。本文给大家介绍MySQL中常用的一些函数,其中主要包括数学函数、字符串函数、日期时间函数、分组合并函数、逻辑函数以及开窗函数。不过开窗函数很重要,我们在下篇文章单独介绍。首先给大家介绍字符串函数。
我们首先通过一张表格来给大家介绍字符串函数的相关功能:
我们常用的字符串函数大概就这些。我们在本文中只介绍最常见的字符串函数,其他不常用的大家在工作中用到了可以去看看相关用法即可;
1、CONCAT(str1,str2,...)
把多个文本字符串合并成一个长字符串;具体用法如下:
select concat('我们','要', '好好学习');
执行的结果如下:
这里需要我们注意的是NULL
值问题,任何字符串和NULL值连接均为NULL,具体如下:
select concat('我们',NULL, '好好学习');
执行的结果如下:
2、INSTR(str,substr)
返回子字符串substr在文本字符串str中第一次出现的位置(),具体用法如下:
select instr('我们要学好MySQL', '学好');
执行的结果如下:
3、LEFT(str,len)
返回字符串str的左端len个字符,具体用法如下:
select left('我们要学好MySQL', 3);
执行的结果如下:
4、RIGHT(str,len)
返回字符串str的右端len个字符,具体用法如下:
select right('我们要学好MySQL', 3);
执行的结果如下:
5、MID(str,pos,len)
返回字符串str的位置pos起len个字符,具体用法如下:
select mid('我们要学好MySQL', 4,2);
执行的结果如下:
6、SUBSTRING ( expression, start, length )
截取字符串,其中的参数如下:
- expression:字符串、二进制字符串、文本、图像、列或包含列的表达式。请勿使用包含聚合函数的表达式。
- start:整数或可以隐式转换为int 的表达式,指定子字符串的开始位置。
- length:整数或可以隐式转换为 int 的表达式,指定子字符串的长度。
具体用法如下:
select substring('我们要学好MySQL',1,3);
执行的结果如下:
7、REPLACE(str,from_str,to_str)
用字符串to_str替换字符串str中的子串from_str并返回,具体用法如下:
select replace('我们要学好MySQL', 'MySQL', 'JAVA');
执行的结果如下:
8、REPEAT(str,count)
返回由count个字符串str连成的一个字符串具体用法如下:
select repeat('我们要学好MySQL', 3);
执行的结果如下:
9、UPPER(str)
返回大写的字符串str,具体用法如下:
select upper('mysql');
执行的结果如下:
10、LOWER(str)
返回大写的字符串str,具体用法如下:
select lower('MYSQL');
select concat(upper(left(empname,1)), lower(mid(empname,2))) from emp;
我们首先通过一张表格来给大家介绍数学函数的相关功能:
我们前面都提过,只是介绍最常用的。本部分也是一样的;
1、ABS(n)
返回n的绝对值,具体用法如下:
select abs(-32);
执行的结果如下:
2、 FLOOR(n)
返回不大于n的最大整数值,具体用法如下:
select floor(1.23);
执行的结果如下:
3、CEILING(n)
返回不小于n的最小整数值,具体的用法如下:
select ceiling(1.23);
执行的结果如下:
4、ROUND(n,d)
返回n的四舍五入值,保留d位小数(d的默认值为0),具体用法如下:
select round(1.58);
执行的结果如下:
5、RAND(n)
返回在范围0到1.0内的随机浮点值(可以使用数字n作为初始值),具体用法如下:
select rand();
select rand(2);
我们首先通过一张表格来给大家介绍日期函数的相关功能:
我们前面都提过,只是介绍最常用的。本部分也是一样的;
1、DATE(date)
返回指定日期/时间表达式的日期部分或将文本转为日期格式,具体用法如下:
select date('20200101');
执行的结果如下:
2、WEEK(date)
返回指定日期是一年中的第几周,具体如下:
select week('2021-03-27');
执行的结果如下:
3、MONTH(date)
返回指定日期的月份,具体如下:
select month('2021-03-27');
4、QUARTER(date)
返回指定日期是一年的第几个季度,具体实现如下:
select quarter('2021-03-27');
执行的结果如下:
5、YEAR(date)
返回指定日期的年份(范围在1000到9999),具体实现如下:
select year('2021-03-27');
执行的结果如下:
不过我们的日期函数还可以加减运算,具体如下:DATE_ADD(date,interval expr type)
、ADDDATE(date,interval expr type)
、DATE_SUB(date,interval expr type)
、SUBDATE(date,interval expr type)
,接下来,我们介绍其中的参数含义:
- date是一个datetime或date值
- expr对date进行加减法的一个表达式字符串
- type指明表达式expr应该如何被解释
我们一般的参数会涉及到时分秒年月日,具体的含义以及格式如下表所示:
具体用法如下:
select date_add("2021-03-27",interval 1 day);
具体执行结果如下:
前面介绍的是加一天,我们也可以减一天操作,具体实现如下:
select date_sub("2021-03-27", interval 1 day);
具体执行结果如下:
6、DATE_FORMAT(date,format)
根据format字符串格式化date值,在format字符串中可用标志符。具体的参数如下:
- %m 月名字(january……december)
- %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)
- %i 分钟, 数字(00……59)
- %r 时间,12 小时(hh:mm:ss [ap]m)
- %t 时间,24 小时(hh:mm:ss)
- %s 秒(00……59)
- %p am或pm
- %w 一个星期中的天数(0=sunday ……6=saturday )
- %u 星期(0……52), 这里星期天是星期的第一天
- %% 字符%
具体用法如下:
select date_format('2021-03-27 15:21:00','%Y-%m-%d');
具体执行结果如下:
7、CURDATE()
以’yyyy-mm-dd’或yyyymmdd格式返回当前日期值(根据返回值所处上下文是字符串或数字),具体用法实现如下:
select curdate();
具体执行结果如下:
8、CURTIME()
以’hh:mm:ss’或hhmmss格式返回当前时间值(根据返回值所处上下文是字符串或数字),具体实现如下:
select curtime();
具体执行结果如下:
9、NOW()
以’yyyy-mm-dd hh:mm:ss’或yyyymmddhhmmss格式返回当前日期时间(根据返回值所处上下文是字符串或数字),具体的实现如下:
select now();
具体执行结果如下:
10、DATEDIFF(expr1,expr2)
返回结束日expr1和起始日expr2之间的天数,具体实现入下:
-- 练习:查询每位员工的工龄:ename,hiredate,工龄
select empno,empname,job,hiredate,datediff(curdate(),hiredate)/365 工龄 from emp;
具体执行结果如下:
11、UNIX_TIMESTAMP()
返回一个unix时间戳(从’1970-01-01 00:00:00’开始的秒数,date默认值为当前时间),具体实现如下:
select unix_timestamp();
具体执行结果如下:
当然我们也可以在unix_timestamp()
中加入日期,具体如下:
select unix_timestamp('2021-03-27');
具体执行结果如下:
12、FROM_UNIXTIME(unix_timestamp)
以’yyyy-mm-dd hh:mm:ss’或yyyymmddhhmmss格式返回时间戳的值(根据返回值所处上下文是字符串或数字),具体实现如下:
select from_unixtime(1577808000);
具体执行结果如下:
查询每位员工的使用截止日期(试用期为三个月):empname、hiredate,试用截止日期
select empname, hiredate, adddate(hiredate, interval 3 month) 试用截止日期 from emp;
1、CAST(expression AS data_type)
用于将某种数据类型的表达式显式转换为另一种数据类型,CAST()函数的参数是一个表达式,它包括用AS关键字分隔的源值和目标数据类型,具体的参数如下:
- expression:任何有效的SQL表达式。
- AS:用于分隔两个参数,在AS之前的是要处理的数据,在AS之后是要转换的数据类型。
- data_type:目标系统所提供的数据类型,包括bigint和sql_variant,不能使用用户定义的数据类型。
可以转换的类型如下:
- 二进制,同带binary前缀的效果 : BINARY
- 字符型,可带参数 : CHAR()
- 日期 : DATE
- 时间: TIME
- 日期时间型 : DATETIME
- 浮点数 : DECIMAL
- 整数 : SIGNED
- 无符号整数 : UNSIGNED
具体实现如下:
select cast('9.0' AS decimal);
GROUP_CANCAT([distinct] str [order by str asc/desc] [separator])
将group by产生的同一个分组中的值连接起来,返回一个字符串结果。具体用法如下:
-- 查询各部门的员工姓名
select deptno,group_concat(empname) from emp group by deptno;
1、IFNULL(expression, alt_value)
判断第一个表达式是否为 NULL,如果为 NULL 则返回第二个参数的值,如果不为 NULL 则返回第一个参数的值。具体用法实现如下:
select ifnull(comm,0) from emp;
具体执行结果如下:
2、IF(expr1,expr2,expr3)
如果expr1的值为true,则返回expr2的值,如果expr1的值为false,则返回expr3的值。,具体实现如下:
-- 查询每位员工的工资级别:3000及以上为高,1500-3000为中,1500及以下为低
select empname,sal,if(sal>=4000,'高',if(sal>=3500,'中','低')) 工资级别 from emp;
-- 计算每位员工的实发工资(基本工资+提成):empname,sal,实发工资
select empname, sal, sal+ifnull(comm, 0) 实发工资 from emp;
具体执行结果如下:
3、CASE WHEN expr1 THEN expr2 [WHEN expr3 THEN expr4...ELSE expr] END
如果expr1的值为true,则返回expr2的值,如果expr3的值为false,则返回expr4的值,具体实现如下:
select empname,sal,case when sal>=3000 then '高' when sal>=1500 then '中' else '低' end 工资级别 from emp;
具体执行结果如下:
最后一部分是窗口函数,但是比较关键,我们下一篇文章详细介绍。
上篇文章给大家介绍了多表连接查询以及嵌套查询,包括内连接和外连接,也介绍了子查询,包括in以及any等关键字的用法。最后分别通过案例对这部分知识点进行了讲解。本文给大家介绍MySQL中常用的一些函数,其中主要包括数学函数、字符串函数、日期时间函数、分组合并函数、逻辑函数以及开窗函数。不过开窗函数很重要,我们在下篇文章单独介绍。另外,还通过案例来给大家介绍该函数的各种用法。因此,mysql是很重要的一个技能,几乎计算机中的每个岗位都需要一个mysq技能,因此,需要我们特别的掌握。生命不息,奋斗不止,我们每天努力,好好学习,不断提高自己的能力,相信自己一定会学有所获。加油!!!