5.4 进阶4:常见函数

Posted qifanren

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了5.4 进阶4:常见函数相关的知识,希望对你有一定的参考价值。

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年
image-20210513180641844
# 查询入职日期为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:常见函数的主要内容,如果未能解决你的问题,请参考以下文章

我的Android进阶之旅NDK开发之在C++代码中使用Android Log打印日志,打印出C++的函数耗时以及代码片段耗时详情

ReactNative进阶(二十三):Javascript 严格模式详解

前端学习D4:CSS进阶

Mysql查询相关知识(进阶三 排序查询,进阶四:常见函数)

我的Android进阶之旅关于Android平台获取文件的mime类型:为啥不传小写后缀名就获取不到mimeType?为啥android 4.4系统获取不到webp格式的mimeType呢?(代码片段

我的Android进阶之旅关于Android平台获取文件的mime类型:为啥不传小写后缀名就获取不到mimeType?为啥android 4.4系统获取不到webp格式的mimeType呢?(代码片段