目录
JDBC从入门到放弃
09-JDBC的函数
字符函数
数学函数
日期函数:
流程控制函数
分组函数
Jdbc的函数属于数据量层面的知识。这里简答介绍一下,常用的SQL函数。
函数:将某些功能封装到一起,对外提供到一个接口(函数名),通过函数调用的方式可以重复的执行函数里的功能代码从而提高我们的代码的复用性.
MySql里自带了很多已经封装好了的函数,可以帮我们实现很多功能,接下来我们就来学习这些现成的函数的用法:
MySql里调用函数和java一样用函数名(),完整的写法:
select 函数名(实参) from 表名
select length('abcd'); // 返回值:4
select length('小白abc'); // 返回值:与字符编码类型有关
show variables like '%char%'; //查看数据可客服端字符集编码
GBK:一个汉字占两个字节;UTF-8:一个汉字是占三个字节.
select concat(last_name,'--',first_name) as 姓名 from employees;
select upper('zhonghao');
select lower('XIAOBEI');
案例:查询员工姓和名,把姓大写,名小写,并用&连接起来显示:
select
案例:截取字符串,从第4个字符(包含)开始到最后
select substr('目标字符串',4) as out_put; //注意:Mysql中索引值是从1开始的,和java不同,java索引是从0开始的.
案例:截取字符串,从第二个开始接到第三个
select substr('目标字符串',2,1) as out_put; //注意:第一个数字是开始截取的索引值,第二个数数截取的长度
作用返回子字符串子源字符串里的起始索引.
select instr('目标字符串','字符串'); //返回结果3, 如果找不到返回0
作用是去掉字符串前后的空格,中间空格去不掉
select lenght(trim(' a s '));
扩展用法:去掉前后两端的其他字符:select trim('a' from 'aaaaa字符aaaaa去掉aaaaa');
将填充字符填充到目标字符的左边,补足10个
select lpad('哈哈哈',10,'*'); // 如果中间的数字比目标字符长度小,就只截取左边的数字长度字符串.
与lpad只是填充方向相反,其他一样;
替换
select replace('目标字符串','字符','哈哈');
四舍五入
select round(1.45);//不管正负数,先将绝对值round,然后加正负号
select round(1.567,2); //表示小数点保留2位
向上取整
select ceil(-1.3);
向下取整
截断
select truncate(1.65,1); // 结果保留小数1位:1.6
取余
select mod(10,3); java中的mod一样: mod(a,b)====a-a/b*b(计算机中整数除以整数的结果还是整数),结论被除数是正,结果就是正,被除数是负结果就是负数
用户返回当前日期时间
select now();
返回当前系统时间,没有日期部分
select year(now()); 取得年
select year('2004-1-1') ;
select month(now()); 取得月
select monthname(now()); 取得月名..day hour minute second一样
将日期格式的字符转换层制定格式的日期
str_to_date('2018-1-12','%y-%m-%d');
将日期换换成字符串,或者理解为格式化日期
date_format(now(),'%y-%m-%d');
案例:查询入职日期是1992-4-3的员工信息:
select * from employees where hiredate='1992-4-3'; //能找到
select * from employees where hiredate=STR_TO_DATE('1992 4 3','%Y %m %d');
系统函数
这个函数都用的很少
select if('10>1','大','小');
case 要判断的子段或表达式
when case的结果是常量1 then 要显示的值1(或语句1;)
when case的结果是常量2 then 要显示的值2(或语句2;)
......
else case的结果都不前面的时候显示;
end 结束
案例:员工表中, 部门号是30,显示的工资是1.1倍
部门号是40,显示的工资是1.2倍
其他显示原工资
SELECT salary AS 原工资,department_id,
CASE department_id
WHEN 30 THEN salary*1.1
WHEN 50 THEN salary*1.2
ELSE salary
END AS 新工资
FROM employees;
case
when 条件1 then 要显示的值1(或语句1;)
when 条件2 then 要显示的值2(或语句2;)
......
else 前面的条件都不符合时候显示;
end 结束
SELECT salary,
CASE
WHEN salary>20000 THEN 'A级工资'
WHEN salary>10000 THEN 'B级工资'
ELSE 'C级工资'
END AS 工资等级
分组函数和前面讲的函数不同在于,前面的对内容本身的处理,而分组函数的主要功能是统计.
主要讲的分组函数:sum , avg , max , min , count
select sum(salary) as 单月所发总工资 from employees;
select avg(salary) as 单月所发平均工资 from employees;
select max(salary) as 单月所发最多工资 from employees;
select min(salary) as 单月所发最少工资 from employees;
select count(*) as 总员工人数 from employees; //count(*) 用来统计行数
分组函数的共同特点:会忽略null
分组函数还可以和一个关键字和用: distinct
select count(distinct salary) from employees;