常见函数
概念:
类似于java的方法,将一组逻辑语句封装在方法体中,对外暴露方法名。优点隐藏了实现细节;提高代码的重用性。
调用:
select 函数名(实参列表) [FROM 表]
特点:叫什么(函数名),干什么(函数功能)
分类:
1、单行函数:
字符函数,数学函数,日期函数,其他函数,控制函数。
2、分组函数:
功能:做统计使用,又称为统计函数、聚合函数、组函数。
字符函数:
1、length:获取参数值的字节个数。length:n.长度; 篇幅; 时间的长短; 有…长度的; 一节; 池长; 艇位; 马位
查看张三丰hahaha的长度
SELECT LENGTH('张三丰hahaha');//15(utf-8汉字占3个字节,字母占1个字节;GBK汉字占2个字节)
2、concat:拼接字符串。concatenate:vt.把 (一系列事件、事情等)联系起来;adj.连接的,联系在一起的
用_拼接员工的姓和名
SELECT CONCAT (last_name,'_',first_name) FROM employees;
将姓变大写,名变小写然后拼接
SELECT CONCAT (UPPER(last_name),'_',LOWER(first_name)) AS 姓名 FROM employees;
姓名中首字母大写,其他字符小写然后用_拼接起来
SELECT CONCAT (UPPER(CONCAT(last_name,1,1)),'_',LOWER(CONCAT(first_name,2))) AS 姓名 FROM employees;
3、upper:字母 小写变大写。upper:adj.较高的,上面的; 上部的;n.鞋帮,靴面; 兴奋剂
SELECT UPPER('john');//JOHN
4、lower:字母 大写变小写。lower:adj.下方的; 底部的; 朝海岸的; 向南的; 较小的; 较低级的v.降低; 减少
SELECT LOWER('JOHN');//john
5、substr/substring:截取,索引从1开始。substring:n.
子链
I、截取从指定索引处后面所有字符
SELECT SUBSTR('李莫愁爱上了陆展元',7);//陆展元
II、截取从指定索引处指定字符长度的字符
SELECT SUBSTR('李莫愁爱上了陆展元',1,3);//李莫愁
6、instr:返回字符串第一次出现的索引,如果找不到则返回0.
SELECT INSTR ('杨不悔爱上了殷六侠','殷六侠');
7、trim:去掉前后指定字符串。trim:vt.修剪; 整理; 装饰adj.整齐的,整洁的; 修长的; 苗条的n.整齐; 修剪; 健康状态; 装束vi.削减
SELECT TRIM('a' FROM 'aaaaa张aa翠aaaa山aaaa');//张aa翠aaaa山
SELECT TRIM('aa' FROM 'aaaaa张aa翠aaaa山aaaa');//a张aa翠aaaa山
8、lpad:用指定的字符实现左填充指定长度,长度不够则截断。pad:vt.给…装衬垫, 加垫子; 填塞; 踏平vi.步行,放轻脚步走n.垫,衬垫; 护具; 便签本; 发射台
SELECT LPAD('殷素素',6,'');//*殷素素
SELECT LPAD('殷素素',2,'');//殷素
9、rpad:用指定的字符实现右填充指定长度,,长度不够则截断
SELECT RPAD('殷素素',6,'');//殷素素**
10、replace:替换
SELECT REPLACE ('周芷若周芷若爱上了张无忌','周芷若','赵敏');//赵敏赵敏爱上了张无忌
数学函数
1、round :四色五入。round:adj.圆/球/环/弧形的; 整数的adv.(在)周围; 围绕; 到处; 转过来; 绕弯; 依次; 到某地; 大概prep.围(绕); 绕过; 遍及; 基于; 克服; 大概n.轮,局,回合; 惯常活动; 递送路线; 一巡饮料; 一阵; 一枪; 圆块v.绕过; 变圆; 四舍五入
SELECT ROUND(-1.55);//-2
SELECT ROUND(-1.567,2);//-1.57
2、ceil :向上取整,返回>=改参数的最小整数。ceil :vt.装天花板,装船内格子板
SELECT CEIL(1.002);//2
SELECT CEIL(-1.002);//-1
3、floor :向下取整,返回<=改参数的最小整数。floor:n.地面,地板; 楼层; 底部; 议员席vt.铺地板; 击败,打倒
SELECT FLOOR(1.002);//1
SELECT FLOOR(-1.002);//-2
4、truncate :截断。truncate:vt.缩短
SELECT TRUNCATE(1.699,1);//1.6
5、mod :取余 ,符号正反与被除数有关。mod:n.摩登派; 现代派分子abbr.现代的(等于modern); 修改(等于moderate); 模数,绝对值(等于modulus)
mod(a,b):a-a/b*b
mod(-10,-3):-10-(-10)/(-3)*(-3)=-10-3*(-3)=-10+9=-1
SELECT MOD(10,3);//1
SELECT MOD(10,-3);//1
SELECT MOD(-10,3);//-1
SELECT MOD(-10,-3);//-1
日期函数
1、now:返回当前系统日期+时间
SELECT NOW();//2024-04-06 19:30:00
2、curdate:返回当前系统日期,不包含时间。current:adj.当前的; 流通的n.(河、湖或海的)水流; 电流; 趋向
SELECT CURDATE();//2024-04-06
3、curtime:返回当前时间,不包含日期
SELECT CURTIME();//19:30:00
4、获取指定的部分,年、月、日day、小时hour、分钟minute、秒second
SELECT YEAR(NOW()) 年;
SELECT MONTH((NOW()) 月;//4
SELECT MONTHNAME((NOW()) 英文月;//April
5、str_to_date:将日期格式的字符 转换成 指定格式的日期
SELECT STR_TO_DATE('9-13-1999','%m-%d-%Y);//1999-09-13
SELECT STR_TO_DATE('13-1999 9','%d-%Y %m);//1999-09-13
6、date_format: 将日期 转换成 字符。format:n.(出版物的)版式; [自](数据安排的)形式; 电视节目的总安排(或计划)vt.使格式化; 安排…的格局; 设计…的版面vi.设计一个版式
SELECT DATE_FORMAT(NOW(),'%y年%m月%d日');//24年04月06日
查询有奖金的员工名和入职日期(xx月/xx日 xx年)
SELECT last_name,DATE_FORMAT(hiredate,'%m月/%d日 %y年) 入职日期 FROM employees where commission_pct is not null;
其他函数
SELECT VERSION();//查看版本号VERSION:n.变体,版本; (从不同角度的)描述,说法; 改编形式
SELECT DATEBASE();//查看当前数据库
SELECT USER():查看当前用户
查看客服端字符集(character_set_Client)。character:n.性格,特点; 特色; 勇气,毅力; 声望; 人物,角色,人; 字符,文字,字母。client:n.客户; 委托人; 〈计〉客户机
SHOW VARIABLES LIKE '%char%';
流程控制函数
1、if函数: if else的效果
SELECT IF(10<5,'大','小');//小
2、case函数:
I、switch case效果(等值判断)
java中:switch(变量或表达式){
case 常量1:语句1;break;
...
default:语句n;break;
}
mysql中:case 要判断的字段或表达式
when 常量1 then 要显示的值1或语句1;
...
else 要显示的值n或语句n;
end
查询员工的工资,要求 部门号为30,显示工资为1.1倍;部门号为40,1.2倍;部门号为50,1.3倍;其他部门则为原工资
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;
2、类似于 多重if
java中:if(条件1){
语句1;
}else if(条件2){
语句2;
}
...
else{
语句n;
}
mysql中:case
when 条件1 then 要显示的值1或语句1
...
else 要显示的值n或语句n
end
查询员工的工资情况,如果工资>20000,A级;>15000,B级;>10000,C级;否则D级
SELECT salary,
CASE
when salary>20000 then 'A'
when salary>15000 then 'B'
when salary>10000 then 'C'
ELSE 'D'
END AS 工资级别
FROM employees;