字符函数
- length(str):用于获取参数值得字节个数,其中汉字算3位。
- concat(列表):列表所在列的内容进行拼接。
- upper、lower:将字符进行大小写转换。
- substr、substring:获取子字符串,指定起始索引(从1开始)和长度。
select substr('字符串',[index,]length);
- instr:查询字符串中子字符串第一次出现对应的索引位置(从1开始)。
select instr('字符串','子字符串');
- trim:用于去除字符串中前后指定的字符串(默认是空格)。
select trim ('指定字符串' from 字符串);
- lpad:用指定的字符实现左填充实现指定长度
select lpad (字符串,长度,'指定字符串');
- rpad:用指定的字符实现右填充实现指定长度
- replace:将字符串中指定的字符替换成别的字符
select replace('字符串','指定字符','别的字符');
数学函数
- round(值,小数点位数):保留小数点后几位
- cell(值):向上取整
- floor(值):向下取整
- truncate(值,小数点位数):直接截断 ,不考虑四舍五入
- mod(被操作数,操作数):直接取模
日期函数
- now():返回当前的系统日期和时间
- curdate():系统日期
- curtime():系统时间
- year/mouth/day(日期):获取对应的部分
- str_to_date('字符串','源匹配格式'):
例如在业务中date可能以’4-3 1992‘的形式表示与数据库中的格式不符合,现在用模板进行匹配然后输出格式化的日期可以用以下的格式:
select * from emploees where hiredate = str_to_date('4-3 1992','%c-%d %Y');
日期格式符
- data_format:将日期转换成指定格式字符
select date_format(now(),'%y年%m月') from emploees;
其他函数
- select version();
- select database();
- select user();
以上函数查询当前运行环境的版本、数据库和用户。 - datediff(大日期,小日期):计算出两个日期间的间隔
流程控制函数
- if()函数:if(运算式子,true的对应项,false的对应项);类似三元运算符
- case()函数:
- 将传统的switch语句的switch、case、:和default转换成case、when、then和else,并在末尾加上end。->等值判断
select salary as 原始工资,department_id,
case department_id
when department_id = 30 then salary * 1.1
when department_id = 40 then salary * 1.2
else salary
end as 新工资
from emploees;
- 可以用作多重if语句(if() {}else if() {}else{} )的作用。->区间判断
select salary,
case
when salary > 2000 then 'A'
when salary > 1500 then 'B'
else 'C'
end as 新评级
from employees;
分组函数(聚合函数):用作统计功能
- sum(字段):计算出该字段下的值之和
select sum(salary) from employees;
注意:
- min\max\avg\count也类似,count是指明个数null不计入时的项数
- sum、avg都针对数值型,字符型不会报错但没有意义。
- max、min和count对字符串有意义
- max、min对日期型字符串也可用
- sum、avg都忽视了null值,avg被除数的个数不包括null项
- 与组合函数一同查询的字段要求是group by后的字段,保障了一对一
- count(字段):用于统计该字段中不为null的记录的个数,可以和distinct结合
select count(1) 或者 select count(*);经常用于统计记录的条数
select count(distinct salary) from employees;
分组查询
通过group by 字段的形式对整个子表进行分组然后再以分组函数对某些字段进行结果唯一性的运算。
select 分组函数,字段
from 表
[where 筛选条件]
group by 分组的字段;
[order by 子句]
注意:
鉴于group by 会对字段内容进行分组再进行查询操作,意味着展示出来的子表上的记录数目是依赖于num_group的,因此除了group by后面的字段外在select后面的字段都需要经过分组函数唯一性处理(本质上就是对每一个分组进行分组操作获得在对应分组里面的唯一值才可以匹配规格)。
网友评论