mysql打卡学习5

进阶4:常见函数

/*
概念:将一组逻辑语句封装在方法体中,对外暴露方法名
好处:1.隐藏了实现细节 2。提高代码的重用性
调用:select 函数名(实参列表)【from 表】
特点:
	1.叫什么(函数名)
	2.干上面(函数功能)
分类
	1.单行函数
	concat,length,ifnull
	2.分组函数
	功能:统计使用,又称统计函数,聚合函数,组函数
常见函数:
	字符函数
	length
	concat
	substr
	instr
	trim
	upper
	lower
	lpad
	rpad
	replace
	
	数学函数
	round
	ceil
	floor
	truncate
	mod
	
	日期函数
	now
	curdate
	curtime
	year
	month
	monthname
	day
	hour
	minute
	second
	str_to_date
	date_formate
	
	其他函数
	version
	database
	user
	
	控制函数
	if
	case
*/

一.字符函数

#1.length 获取参数的字节个数
SELECT LENGTH('john');
SELECT LENGTH('张三丰hhhhh');
#查看客户端字符集
SHOW VARIABLES LIKE '%char%';
#2.concat 拼接字符
SELECT CONCAT(last_name,'_',first_name) AS 姓名 FROM employees;
#3.大小写
SELECT UPPER('john');
SELECT LOWER('johN');
#例:姓大写,名小写拼接
SELECT CONCAT(UPPER(last_name),'_',LOWER(first_name)) AS 姓名
FROM employees;
#4.substr 
#注意:索引从1开始
#截取从指定索引后所有的字符
SELECT SUBSTR('李莫愁爱上了陆湛远',7)  AS out_put;
#截取从指定索引处指定字符长度
SELECT SUBSTR('李莫愁爱上了陆湛远',1,3) AS out_put;
#案例:姓名中首字符大写,其他字符小写然后用_拼接
SELECT CONCAT(UPPER(SUBSTR(last_name,1,1)),'_',LOWER(SUBSTR(last_name,2))) AS out_put
FROM employees;
#5.instr 返回字串第一次出现的索引,如果找不到就返回0
SELECT INSTR ('杨不悔爱上了殷刘霞','殷刘霞') AS out_put;
#6.trim 默认去除字符串前后面的空格
SELECT LENGTH(TRIM('      dasada张春生      '))AS out_put;
#去除字符串前后指定字符或字符串
SELECT TRIM('a' FROM'aaaaadasada张a春生aaaa')AS out_put;
#7.lpad 用指定的字符左填充到指定长度,不到指定长度则截断
SELECT LPAD('殷素素',10,'$') AS out_put;
SELECT LPAD('殷素素',2,'$') AS out_put;
#8.rpad 用指定的字符右填充到指定长度,不到指定长度则截断
SELECT RPAD('殷素素',10,'$') AS out_put;
SELECT RPAD('殷素素',2,'$') AS out_put;
#9.replace 替换
SELECT REPLACE('周芷若周芷若,张无忌爱上了周芷若','周芷若','赵敏') AS out_put;

二.数学函数

#round 四舍五入,或者保留小数点后指定位数
SELECT ROUND(-1.55);
SELECT ROUND(1.567,2);
#ceil 向上取整 >=该参数
SELECT CEIL(-1.02);
#floor 向下取整 <=该参数
SELECT FLOOR(-9.99);
#truncate 截断小数点后指定位数
SELECT TRUNCATE(1.69999,1);
#mod取余9
SELECT MOD(10,-3);
SELECT 10%(-3);

三.日期函数

#new 返回当初系统日期+时间
SELECT NOW();
#curdate 返回当前系统日期,不包含时间
SELECT CURDATE();
#curtime 时间
SELECT CURTIME();
#获取指定部分
SELECT YEAR(NOW()) 年;
SELECT YEAR('1998-1-1') 年;
SELECT YEAR(hiredate) AS 年 FROM employees;
SELECT MONTH(NOW()) 月;
#月英文
SELECT MONTHNAME(NOW()) 月;
#str_to_date 字符通过指定个数转换称日期
SELECT STR_TO_DATE('1998-3-2','%Y-%c-%d') AS out_put;
#查询入职日期为1992-4-3
SELECT * 
FROM employees 
WHERE hiredate = '1992-4-3';

SELECT *
FROM employees
WHERE hiredate= STR_TO_DATE('4-3 1992','%c-%d %Y');
#date_format 将日期转换为字符
SELECT DATE_FORMAT(NOW(),'%y年%m月%d日') AS out_put;

#查询有奖金的员工名和入职日期(XX月/XX日 xx年)
SELECT last_name,DATE_FORMAT(hiredate,'%m月/%d日 %y年')
FROM employees
WHERE commission_pct IS NOT NULL;

四.其他函数

SELECT VERSION();
#当前库
SELECT DATABASE();
SELECT USER();

五.流程控制函数

#1.if函数:if else 的效果
SELECT IF(10<5,'大','小');

SELECT last_name,commission_pct,IF(commission_pct IS NULL,'没奖金 呵呵','有奖金 嘻嘻') AS 备注
FROM employees;
#2.case函数
/*
switch(变量或者表达式)
{
	case 常量;语句1;break;
	....
	default:语句n:break;
}
mysql中
case 要判断的字段或者表达式 
when 常量1 then 要显示的值1或语句1;
when 常量2 then 要显示的值2或语句2;
....
else 要显示的值n或语句n;
end

*/
/*
显示部门的工资,部门编号,新工资
如部门编号=30,工资为1.1倍
如部门编号=40,工资为1.2倍
如部门编号=50,工资为1.5倍
其他部门正常
*/
SELECT salary AS 原始工资,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;
#3.case函数的使用二:类似于多层if
/*
caas
when 条件1 then 要显示的值1或语句1
when 条件1 then 要显示的值1或语句1
...
else 要显示的值n或者语句n
*/

/*
查询员工工资的情况
>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;
#练习
#1.显示系统时间 日期+时间
SELECT NOW();

#2. 查询员工号,姓名,工资以及工资提高20%后的结果
SELECT employee_id,last_name,salary,salary*1.2 AS 新工资
FROM employees;

#3.员工姓名按照首字符排列,写出姓名长度
SELECT last_name,LENGTH(last_name) AS 字符长度,SUBSTR(last_name,1,1) AS 首字符
FROM employees
ORDER BY last_name;

#4.拼接
SELECT CONCAT(last_name,'earns',salary,'monthly but wants ',salary*3) AS dream_salary
FROM employees
WHERE salary=24000;

#5.
/*
job       grade
AD_PRES   A
ST_MAN    B
IT_PROG   C
*/
SELECT job_id AS job,
CASE job_id
WHEN 'AD_PRES' THEN 'A'
WHEN 'ST_MAN'  THEN 'B'
WHEN 'IT_PROG' THEN 'C'
END AS grade
FROM employees
WHERE job_id IN ('AD_PRES','ST_MAN' ,'IT_PROG');
#where 不能用别名
原创文章 23 获赞 26 访问量 425

猜你喜欢

转载自blog.csdn.net/weixin_41672404/article/details/106109233