赞
踩
目录
CONCAT_WS(x, s1,s2...sn) 指定分隔符合并
POSITION(s1 IN s) 从字符串截取s1的开始位置
UNIX_TIMESTAMP(DATE_STRING) 解析日期为时间戳
EXTRACT(type FROM d) 返回日期的具体数值
MAKEDATE(year, day-of-year) 构建日期通过天数
在MySQL中,为了提高代码重用性和隐藏实现细节,MySQL提供了很多函数。函数可以理解为别人封装好的模板代码。
在MySQL中,聚合函数主要由:count,sum,min,max,avg,这些简单的组成,但是仍然有许多的聚合函数需要我们自己去了解和掌握,下面我们将详细的介绍MySQL一些基本的函数,旨在解决我们日常的一些的业务场景问题。
group_concat()函数首先根据group by指定的列进行分组,并且用分隔符分隔,将同一个分组中的值连接起来,返回一个字符串结果。
group_concat([distinct] 字段名 [order by 排序字段 asc/desc] [separator '分隔符'])
它和我们最初学习的group by是有所区别的;这里的分组是将一列里面的值进行分组,然后放在跳一行的表中。
说明:
(1)使用distinct可以排除重复值;
(2)如果需要对结果中的值进行排序,可以使用order by子句;
(3)separator是一个字符串值,默认为逗号。、
准备数据集
- create table emp(
- emp_id int primary key auto_increment comment '编号',
- emp_name char(20) not null default '' comment '姓名',
- salary decimal(10,2) not null default 0 comment '工资',
- department char(20) not null default '' comment '部门'
- );
-
- insert into emp(emp_name,salary,department)
- values('张晶晶',5000,'财务部'),('王飞飞',5800,'财务部'),('赵刚',6200,'财务部'),('刘小贝',5700,'人事部'),
- ('王大鹏',6700,'人事部'),('张小斐',5200,'人事部'),('刘云云',7500,'销售部'),('刘云鹏',7200,'销售部'),
- ('刘云鹏',7800,'销售部');
- -- 将所有员工的名字合并成一行
- select group_concat(emp_name) from emp;
那么肯定有的小伙伴,对该函数有所疑问,为什么要使用该函数呢,这种函数应用场景在哪里呢?
应用场景:王老板此时需要看每个部门的人员是那些,此时的你应该怎么做,学了这个函数之后你就可以一行代码解决。它与group by联合使用的效果比较好,例如下面还可以指定分隔符,便于我们自己查看。
- -- 指定分隔符合并
- select department,group_concat(emp_name separator '-' ) from emp group by department;
我们还可以指定排序方式,在这里我们可以按照他们的薪资水平进行展示,那么也显示该函数的一个功能,这里面不单单可以对某一列进行字段分组,还可以对另外一列进行排序
- -- 指定排序方式和分隔符
-
- select department,group_concat(emp_name order by salary desc separator ';' ) from emp group by department;
- -- ABS(X)
- -- 修改标准的字段,使其变成负数
- UPDATE emp SET salary=-salary WHERE emp_name ='王大鹏';
- SELECT salary from emp WHERE emp_name='王大鹏';
- SELECT ABS(salary) from emp WHERE emp_name='王大鹏';
select ceil(1.7) #2
那么比如0.7,那么就是1
- -- FLOOR(X)
- SELECT FLOOR(1.7)
返回以下数字列表中的最大值:
SELECT GREATEST(3, 12, 34, 8, 25); -- 34
返回以下字符串列表中的最大值:
SELECT GREATEST("Google", "Runoob", "Apple"); -- Runoob
返回以下数字列表中的最小值:
SELECT LEAST(3, 12, 34, 8, 25); -- 3
返回以下字符串列表中的最小值:
SELECT LEAST("Google", "Runoob", "Apple"); -- Apple
返回字符串 s 的字符数
返回字符串 RUNOOB 的字符数
SELECT CHAR_LENGTH("RUNOOB") AS '字符串长度';
SELECT emp_name as '姓名',CHAR_LENGTH(emp_name) as '名字长度' FROM emp;
character_length和char_length完全相同
字符串 s1,s2 等多个字符串合并为一个字符串
SELECT CONCAT("123","456")
同 CONCAT(s1,s2,...) 函数,但是每个字符串之间要加上 x,x 可以是分隔符
SQL-Tutorial-is-fun!
返回第一个字符串 s 在字符串列表(s1,s2...)中的位置
c 在这个字符串列表中是第三个 注意是第一个位置哟
有时候,针对一些不规则的数据集,我们为了节省时间可以不用其他的工具进行预处理,直接使用ltrim()函数去除前端空格,注意是前端空格哟
去掉字符串 s 结尾处的空格,这里和上面的记住比较的对称,L——left(左);R——right(右)
那么有时候,我们再想,要是两边都有空字符的话,我们这样频繁的嵌套岂不是很麻烦,有没有一个函数直接解决两端的空格呢?答案是有!
去掉字符串 s 开始和结尾处的空格
从字符串 s 的 n 位置截取长度为 len 的子字符串,同 SUBSTRING(s,n,len)
注意,这里的索引开始是1,也就是第一个是1,后面代表着取到的字符串长度 ,下面的函数和它的功能也是一样的。
从字符串 s 中获取 s1 的开始位置
注意这里和前面的field函数是不一样的,前面是在字符串列表里面返回第一个列表元素的位置 ,它由多个字符串,而这个只有一个;
我们举一个详细的例子:通过field函数,第一个参数使用人事部才能匹配到它的位置,如果使用人事那么就无法匹配到,这也是它的一个局限性
如果使用position in 字段就可以匹配到,原因和是什么呢,这是因为第一个函数把多个字符串和后面的字符串进行了全面的匹配,是全局匹配
将字符串 s2 替代字符串 s 中的字符串 s1,只是改变了显示,并没有概念原始的数据集
将字符串s的顺序反过来
这里的应用场景,可以根据你的业务,涉及到一些偏僻的语法,可能就是我们要考的或者现实中创新的部分
比较字符串 s1 和 s2,如果 s1 与 s2 相等返回 0 ,如果 s1>s2 返回 1,如果 s1<s2 返回 -1,比较的是长度
返回从1970-01-01 00:00:00到当前毫秒值;至于为什么是从这一年开始的,有兴趣的小伙伴可以去搜索一下,为什么选取这一年?
将制定日期转为毫秒值时间戳
FROM_UNIXTIME(BIGINT UNIXTIME[, STRING FORMAT])
将毫秒值时间戳转为指定格式日期
这个功能有时候可以将一些不规则的数据直接用这一行的代码,不需要用到Python,学了mysql还是非常的方便的
也可以达到这种效果
这种方法可以用于格式转换,有些时候我们的格式不统一,有些是字符串组成的日期,有些本身就是日期格式,为了格式的统一性,我们可以利用该方法进行操作
INTERVAL:操作 后面加正负号 即可变成对应的运算符
这些函数,有时候我们可以灵活的运用,可以极大的提高我们的工作效率,特别是前端的展示页面,我们后台只需要修改这样一行代表就可以完成显示,因为mysql是查询而不是修改元数据,所以这就是它的优势。
声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/2023面试高手/article/detail/404737
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。