MySQL学习(4)

进阶4 常见函数

字符函数:LENGTH CONCAT SUBSTR INSTR TRIM UPPER LOWER 1pad RPAD REPLACE
数学函数:ROUND CEIL FLOOR TRUNCATE MOD
日期函数:NOW CURDATE CURTIME YEAR MONTH MONTHNAME DAY HOUR MINUTE SECOND STR_TO_DATE DATE_FORMAT
其他函数:VERSION DATABASE USER
控制函数: IF CASE

一.单行函数

如:CONCAT(),LENGTH(),IFNULL()等

1.字符函数

#length 获取参数值的字节个数

SELECT LENGTH("world");
#结果 5
SELECT LENGTH("中国");
#结果 6

utf8下,一个英文字母占1个字节,一个汉子占3个字节

2.concat 拼接函数
SELECT
	CONCAT(`last_name`,"_",`first_name`) AS 姓名
FROM
	`employees`;


#结果:Kochhar_Neena
3.upper 小写变大写 LOWER 大写变小写
SELECT UPPER("world");
#结果 WORLD

SELECT LOWER("WoRlD");
#结果 world

示例:将姓变大写,名变小写,然后拼接
SELECT
	CONCAT(UPPER(`last_name`),"_",LOWER(`first_name`)) AS 姓名
FROM 
	employees;
#结果 KOCHHAR_neena
4.SUBSTR,SUBSTRING

注意:SQL索引从1开始
(1)截取从指定索引处后面的所有字符

SELECT SUBSTR("我爱我的祖国",5);
#结果 祖国

(2)截取从指定索引处指定字符长度的字符

SELECT SUBSTR("我爱我的祖国",1,3);
#结果 我爱我

案例:姓名中首字符大写,其他字符小写然后用_拼接,显示出来

SELECT
	CONCAT(UPPER(SUBSTR(`last_name`,1,1)),"_",
	LOWER(SUBSTR(`last_name`,2)))
FROM `employees`;

#结果 K__ing
5.instr

返回子串第一次出现的索引,如果找不到,则返回0

SELECT INSTR("我爱我的祖国","祖国") AS out_put;
#结果 5 
#表示祖国是第五个索引开始
SELECT INSTR("我爱我的祖国和你的祖国","祖国") AS out_put;
#结果 5
SELECT INSTR("我爱我的祖国","租过") AS out_put;
#结果 0
6.trim

剔除前后的空格,也可以是字符

SELECT LENGTH(TRIM("  祖国  ")) AS out_put;
#结果 6
SELECT LENGTH(TRIM("a" FROM "aaa祖国aaa")) AS out_put;
#结果 6
SELECT TRIM("a" FROM "aaa祖aa国aaa") AS out_put;
#结果 祖aa国
7.lpad

用指定的字符实现左填充指定长度

SELECT LPAD("祖国",5,"=");#左填充=
#结果 ===祖国
8.rpad

用指定的字符实现右填充指定长度

SELECT RPAD("祖国",5,"=");#右填充=
#结果 祖国===
9.replace替换
SELECT REPLACE("我爱我的祖国","我","你");
#结果 你爱你的祖国

二、数学函数

1.round 四舍五入
SELECT ROUND(2.25);
#结果 2
SELECT ROUND(2.22564,3);
#结果 2.226
2.ceil 向上取整,返回大于等于该参数的最小整数
SELECT CEIL(2.04);
#结果 3
3.floor 向下取整
SELECT FLOOR(2.99);	
#结果 2
4.truncate 截断
SELECT TRUNCATE(1.599999,2);
#结果 1.59
5.mod 取余
SELECT MOD(5,2);
#结果 1
#-----------------等价
SELECT 5%2;

三、日期函数

1.now 返回当前系统日期+时间
SELECT NOW();
2.curdate 返回当前的系统日期,不包括时间
SELECT CURDATE();
3.curtime 只返回当前时间
SELECT CURTIME();
4.可以获取指定的部分,年、月、日、小时、分钟、秒
SELECT YEAR(NOW()) AS 年;

SELECT YEAR(`hiredate`) AS 年
FROM `employees`;

SELECT MONTH(NOW()) AS 月;
5.str_to_date:将日期格式的字符转换成指定格式的日期
SELECT STR_TO_DATE("9-13-1999","%m-%d-%Y");
#1999-09-13

案例:查询入职日期为1992-4-3的员工信息

SELECT *
FROM `employees`
WHERE `hiredate`="1992-4-3";
#但是在实际中,用户输入的日期格式不一样,就需要str_to_date
例如用户输入的是“4 3-1992”
SELECT *
FROM `employees`
WHERE `hiredate`=STR_TO_DATE("4 3-1992","%m %d-%Y");
左序号 格式符 功能
1 %Y 4位的年份
2 %y 2位的年份
3 %m 月份(01,02…11,12)
4 %c 月份(1,2…11,12
5 %d 日(01,02…)
6 %H 小时(24小时制)7%h小时(12小时制)
7 %i 分钟(00,01…59)
8 %s 秒(00,01…59)
6.date_format:将日期转换成指定的字符
DATE_FORMAT("2018/6/6","%Y年%m月%d日")
#例子1:
SELECT
	DATE_FORMAT(`hiredate`,"%y年%m月%d日") AS 日期
FROM
	`employees`;
#例子2:查询有奖金的员工名和入职日期(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(z,z1,z2)如果z是真,则返回z1,否则返回z2

SELECT
	`last_name`,
	`commission_pct`,
	IF(`commission_pct` IS NULL,"没奖金","有奖金") AS out_put
	
FROM `employees`;
2.case()函数使用1

#在其他语言中

switch(变量或表达式){
	CASE 常量1:语句1;
			break;
	CASE 常量2:语句2;
			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.3倍
其他部门,显示的工资为原工资

SELECT `last_name` 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()函数使用2

#在其他语言中

IF(条件1)
	{语句1;}
ELSE IF(条件2)
	{语句2;}
...
ELSE
	{语句n;}

#在MySQL中

CASE
WHEN 条件1 THEN	要显示的值1或者语句1;
WHEN 条件1 THEN	要显示的值2或者语句2;
...
ELSE 要显示的值n或者语句n;

案例:查询员工的工资的情况
如果工资>20000,显示A级别
如果工资>15000,显示B级别
如果工资>10000,显示c级别
否则,显示D级别

SELECT
	`salary` AS 原工资,
	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后的结果(NEW salary)
SELECT  `employee_id`,
	`last_name`,
	`salary` AS 原工资,
	`salary`*1.2 AS 新工资
FROM `employees`;
3.将员工的姓名按首字母排序,并写出姓名的长度(LENGTH)
SELECT `last_name`,
	LENGTH(`last_name`) AS 长度,
	SUBSTR(`last_name`,1,1) AS 首字母
FROM `employees`
ORDER BY 首字母;
4.做一个查询,产生下面的结果

earns monthly but wants <salary*3>
别名:Dream Salard
结果:King earns 24000 monthly but wants 720005.

SELECT
	CONCAT(`last_name`," earns",`salary`," monthly but wants",`salary`*3) AS "Dream Salard"
FROM `employees`;
5.使用CASE-WHEN,按照下面的条件:|
job grade
AD_PRES A
ST_MAN B
IT_PROG C
否则 D
SELECT `job_id` AS job,
	CASE `job_id`
	WHEN "AD_PRES" THEN "A"
	WHEN "ST_MAN" THEN "B"
	WHEN "IT_PROG" THEN "C"
	ELSE "D"
	END AS 等级
FROM `employees`;

发布了7 篇原创文章 · 获赞 1 · 访问量 1786

猜你喜欢

转载自blog.csdn.net/qq_42374697/article/details/104086558
今日推荐