MySQL学习--SQL函数

MySQL学习–SQL函数

概念

  • 指一段可以直接被另一段程序直接调用的程序或代码;

常用函数

字符串函数

函数功能
CONCAT(S1,S2,…Sn)字符串拼接,将S1,S2,… ,Sn拼接成一个字符串
LOWER(str)将字符串str全部转为小写
UPPER(str)将字符串str全部转为大写
LPAD(str,n,pad)左填充,用字符串pad对str的左边进行填充,达到n个字符串长度
RPAD(str,n,pad)右填充,用字符串pad对str的右边进行填充,达到n个字符串长度
TRIM(str)去掉字符串头部和尾部的空格
SUBSTRING(str, start, len)返回从字符串str从start位置起的len个长度的字符串
  • 案例
/*
	字符串函数
	CONCAT(S1,S2,..Sn)
	LOWER(str)
	UPPER(str)
	LPAD(str,n,pad)
	RPAD(str,n,pad)
	TRIM(str)
	SUBSTRING(str, start, len)
*/

SELECT CONCAT("HELLO", "小温");

SELECT LOWER("HELLO");

SELECT LPAD("01", 5, "-");

SELECT RPAD("01", 5, "-");

SELECT TRIM("      HELLO  小温             ");

SELECT SUBSTRING("ABCDEFGHIJKLMNOPQRSTUVWXYZ", 4, 10); #下标从1开始

-- 由于业务需求变更,企业员工的工号,统一为5位数,目前不足5位数的全部在前面补0。比如: 1号员工的工号应该为00001;
UPDATE EMP SET workno = LPAD(workno, 5, "0");

数值函数

函数功能
CEIL(X)向上取整
FLOOR(x)向下取整
MOD(x, y)返回x/y的模
RAND()返回0~1内的随机数
ROUND(x, y)求参数x的四舍五入的值,保留y位小数
  • 案例
/*
		数值函数
		CEIL(X)
		FLOOR(x)
		MOD(x;y)
		RAND0
		ROUND(Xy)
*/
SELECT CEIL(1.5);

SELECT FLOOR(1.5);

SELECT MOD(7, 3);

SELECT RAND();

SELECT ROUND(1.23456789, 3);


-- 通过数据库的函数,生成一个六位数的随机验证码

SELECT LPAD(fLOOR(RAND() * 1000000), 6, "0");

日期函数

函数功能
CURDATE()返回当前日期
CURTIME()返回当前时间
NOW()返回当前日期和时间
YEAR(date)获取指定date的年份
MONTH(date)获取指定date的月份
DAY(date)获取指定date的日期
DATE_ADD(date, INTERVAL expr type)返回一个日期/时间值加上一个时间间隔expr后的时间值
DATEDIFF(date1,date2)返回 起始时间date1 和 结束时间date2 之间的天数
  • 案例
/*
		日期函数
		CURDATE()
		CURTIME()
		NOW()
		YEAR(date)
		MONTH(date)
		DAY(date)
		DATE_ADD(date,INTERVAL expr type)
		DATEDIFF(date1,date2)
*/
SELECT CURDATE();

SELECT CURTIME();

SELECT NOW();

SELECT YEAR(NOW());

SELECT MONTH(NOW());

SELECT DAY(NOW());

SELECT DATE_ADD(NOW(), INTERVAL 70 DAY);
SELECT DATE_ADD(NOW(), INTERVAL 70 MONTH);

SELECT DATEDIFF("2022-01-01", "2021-01-01");

-- 查询所有员工的入职天数,并根据入职天数倒序排序

SELECT workno, emp_name, DATEDIFF(CURDATE(), entrydate) AS entryday FROM EMP ORDER BY entryday DESC; 

流程函数

函数功能
IF(value, t, f)如果value为true,则返回t,否则返回f
IFNULL(value1, value2)如果value1不为空,返回value1,否则返回value2
CASE WHEN [val1] THEN [res1] … ELSE [default] END如果val1为true,返回res1,…否则返回default默认值
CASE[expr] WHEN [val1] THEN [res1] … ELSE[ default] END如果expr的值等于val1,返回res1,… 否则返回default默认值
  • 案例

/*
		流程控制函数
		IF(value ,t , f)
		IFNULL(value1,value2)
		CASE WHEN [val1 ] THEN [res1] ... ELSE[ default] END
		CASE[expr] WHEN [val1 ] THEN [res1] ... ELSE[ default] END
*/


SELECT IF(FALSE, 'OK', 'ERROR');

SELECT IFNULL('0K', 'DEFAULT');

SELECT IFNULL('', 'DEFAULT');

SELECT IFNULL(NULL, 'DEFAULT');


-- 查询emp表的员工姓名和工作地址(北京/上海 ----> 一线城市 , 其他 ---> 二线城市)
SELECT emp_name, workaddress, ( CASE workaddress WHEN '北京' THEN '一线城市' WHEN '上海' THEN '一线城市' ELSE '二线城市' END ) AS '工作地址' FROM EMP;


-- 统计班级各个学员的成绩,展示的规则如下:
-- 							>= 85,展示优秀  
-- 						  >= 60,展示及格
-- 							否则,展示不及格

-- 创建成绩信息表
CREATE TABLE SCORE(
	id INT COMMENT 'ID',
	stu_name VARCHAR(20) COMMENT '姓名',
	math INT COMMENT '数学',
	chinese INT COMMENT '语文',
	english INT COMMENT '英语'
)COMMENT '学生成绩信息表';

INSERT INTO SCORE VALUES 
(1, '小王', 90, 78, 85),
(2, '小张', 83, 92, 88),
(3, '小李', 91, 89, 83),
(4, '小陈', 93, 87, 86),
(5, '小谢', 89, 84, 87),
(6, '小常', 88, 80, 90)

SELECT * FROM SCORE;

SELECT 
stu_name, 
math,
(case when math >= 85 then '优秀' when math >= 60 then '及格' else '不及格' end) as 'math_level', 
chinese,
(case when chinese >= 85 then '优秀' when chinese >= 60 then '及格' else '不及格' end) as 'chinese_level', 
english,
(case when english >= 85 then '优秀' when english >= 60 then '及格' else '不及格' end) as 'english_level' 
from SCORE;
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

SEA-365

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值