码迷,mamicode.com
首页 > 其他好文 > 详细

5.4 进阶4:常见函数

时间:2021-06-02 15:17:17      阅读:0      评论:0      收藏:0      [点我收藏+]

标签:comm   首字母   用户   img   rdate   大于   提高   when   类型   

5.4 进阶4:常见函数

  • 功能:类似于java中的方法,将一组逻辑语句封装在方法体中,对外暴露方法名称
  • 好处:
    1. 隐藏了实现细节
    2. 提高了代码的重用性
  • 调用:select 函数名 (实参列表)
  • 特点:
    1. 叫什么(函数名)
    2. 干什么(函数功能)
  • 分类:
    1. 单行函数::如concat、ifnull等
    2. 分组函数:做统计使用,又成为统计函数

5.4.1 单行函数

5.4.1.1 字符函数
  • length函数获取参数值的字节个书

    select length(‘张三丰hahahah‘);

  • concat拼接
    select concat(last_name,‘_‘,first_name) 姓名 from employees;

  • substr截取子串

    • 注意:索引从1开始的
 # 截取末尾
 select substr(‘李莫愁爱上了路展元‘,6) out_put;
 路展元
 # 从中间截取
 select substr(‘李莫愁爱上了路展元‘,1,3) out_put;
 李莫愁

 # 姓名中首字母大写,其他字符小写,然后用_拼接,显示出来
 select concat(upper(substr(last_name,1,1)),‘_‘,lower(substr(last_name,2))) 姓名 from employees;
  • instr返回子串第一次出现的索引
# 返回字符串的起始索引,如果找不到返回0
select instr(‘杨不悔爱上殷六侠‘,‘殷六侠‘) as out_put;
殷六侠
  • upper转换成大写
    select lower(‘john‘)

  • lower转换成小写
    select lower(‘JOHN‘)

    #将姓变成大写,名变成小写,然后拼接
    select concat(upper(first_name),‘_‘,lower(first_name)) 姓名 from employees;
    
  • trim去前后指定的空格和字符

select trim(‘   张翠山       ‘) as out_put;
张翠山
# 去除字符
select trim(‘a‘ from ‘aaaaaa张aaaaaaa翠aaaaaaa山aaaaaaa       ‘) as out_put;
张aaaaaaa翠aaaaaaa山aaaaaaa   
  • ltrim去左边空格
  • rtrim去右边空格
  • replace替换
select replace(‘张无忌爱上了周芷若‘,‘周芷若‘,‘赵敏‘) as out_put;
张无忌爱上了赵敏
  • lpad左填充:用指定的字符左填充指定的总长度
select lpad(‘殷素素‘, 10,‘10‘) as out_put;
1010101殷素素
  • rpad右填充
5.4.1.2 数学函数
# round 四舍五入
select round(-1.45);
-1
select round(-1.65);
2
select round(-1.6545,2);
-1.65

# rand 随机数
# floor向下取整
select floor(-1.52);
-2

# ceil向上取整,返回大于等于该参数的最小整数
select ceil(1.52);
2

# mod取余
select mod(10,3);
1

# truncate截断: 取小数点后的位数
select truncate(1.6999999,1);
1.6
5.4.1.3 日期函数
# now当前系统日期+时间
select now();
2021-05-13 17:59:16
# curdate当前系统日期
select curdate();
# curtime当前系统时间
select curtime();

# 获取指定的部份,年year、月month、日day、小时hour、分钟minute、秒second
select year(now());

# 以英文格式返回月份
select monthname(now()); # 出现英文的月份
may
select month(now());
5

# 返回两个日期相差的天数
select datediff

# str_to_date 将各种格式的日期字符,转换成标准日期表示
# 注意后面的格式是用来解析前面的日期的,并不是最终的输出格式
select str_to_date(‘9.13.2021‘,‘%m.%d.%Y‘); 
2021-09-13
 
# date_format将日期转换成字符,转换要求需要的表示格式
select date_format(now(),‘%y年%m月%d日‘);
21年05月13日
select date_format(now(),‘%y年%c月%d日‘);
21年5月13日
select date_format(now(),‘%Y年%m月%d日‘);
2021年05月13日
select date_format(now(),‘%m月/%d日 %y年‘);
05月/13日 21年
技术图片
# 查询入职日期为1992-4-3的员工信息
select *  from employees where hiredate = ‘1992-04-03‘;

# 查询有奖金的员工名和入职日期(xx月/xx日 xx年)
select last_name, date_format(hiredate,‘%m月/%d日 %y年‘) 入职日期
from employees
where commission_pct is not null;
5.4.1.4 流程控制函数
  • if 处理双分支:if else的效果
select if(10>5,‘大‘,‘小‘)
select last_name, commission_pct, if(commission_pct is null,‘没奖金‘,‘有奖金‘) 备注
from employees;
  • case语句情况1:处理等值判断
    • 案例查询员工的工资,要求:
      • 部门号=30,显示的工资为1.1倍
      • 部门号=40,显示的工资为1.2倍
      • 部门号=50,显示的工资为1.3倍
      • 其他部门,显示的工资为原工资
# 代码结构
select 下面要用到的字段或表达式
case 要判断的字段或表达式
when 常量1 then 要显示的值1或语句1;
when 常量2 then 要显示的值2或语句2;
...
else 要显示的值n或语句n;
end
# 案例代码
select salary 原始工资,department_id,
case department_id
when 30 then salary*1.1
when 40 then salary*1.2
when 50 then salary*1.3
else salary
end as 新工资
from employees
order by department_id;
  • case语句情况2:处理条件判断
    • 案例:查询员工的工资情况
      • 如果工资>20000,显示A级别
      • 如果工资>15000,显示B级别
      • 如果工资>10000,显示C级别
      • 否则,显示D级别
# 代码结构
select 下面要用到的字段或表达式
case 
when 条件1 then 要显示的值1或语句1;
when 条件2 then 要显示的值2或语句2;
...
else 要显示的值n或语句n;
end

# 案例代码
select salary,
case 
when salary > 20000 then ‘A‘
when salary > 15000 then ‘B‘
when salary > 10000 then ‘C‘
else ‘D‘
end as 工资级别
from employees
5.4.1.5 其他函数
  • select version()查看当前version版本
  • select database() 查看database当前库
  • select user()查看user当前连接用户
  • select password(‘字符‘)返回该字符的密码形式
  • select md5(‘字符‘)返回该字符的md5加密形式

5.4.2 分组函数

5.4.2.1 简单应用

sum 求和、max 最大值、min 最小值、avg 平均值、count 计数(group by 后面的那个变量的个数)

select sum(salary) from employees;
select max(salary) from employees;
select min(salary) from employees;
select avg(salary) from employees;
select count(salary) from employees;

select sum(salary) 和, max(salary) 最高, round(avg(salary),2) 平均
from employees
5.4.2.2 分组函数使用注意事项
  • sum和avg一般用于处理数值型
  • max、min、count可以处理任何数据类型
  • 以上五个分组函数都忽略null值
  • 都可以搭配distinct使用,用于统计去重后的结果
select sum(distinct,salary) from employees;#去重之后的和
  • count的参数可以支持:字段、常量值,一般放1。count(*)的效率最高,建议使用
select count(salsay) from employees;
select count(*) from employees; # 用来统计行数
select count(1) from employees;
select count(‘字段‘) from employees;
  • 和分组函数一同查询的字段有限制

    • 和分组函数一同使用的字段要求是group by后的字段
    select avg(salary) department_id from employees;
    

5.4 进阶4:常见函数

标签:comm   首字母   用户   img   rdate   大于   提高   when   类型   

原文地址:https://www.cnblogs.com/qifanren/p/14814449.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!