当前位置: 首页 > news >正文

(1-7-6)Mysql 常用的基本函数

目录

0. 前置总结

1. 数字函数

2. 日期函数

2.1 获取系统时间函数 now()、curdate()、curtime()

2.2 日期格式化函数 date_format

 (1) 查询员工的入职年份

(2)利用日期函数, 查询今年、明年自己的生日是 星期几

(3)使用日期函数,查询1981年下半年 入职的员工

2.3 日期偏移计算

(1)  查询 50 天后是 哪一天?

(2) 查询 2025-10-04 后 3个月后的9天 是哪一天?

(3) 查询 2026/01/13  与 2025-10-04相差多少天

3. 字符函数

(1)查询每个员工的大写、 小写姓名 、 姓名长度、 底薪后连接 “$”, 查找姓名中“A”中出现的位置

(2)  insert()和replace() 用法

(3)截取“你好呀,世界!”中的“世界”

(4)手机号的后四位 覆盖为 “*”

(5) 将姓名进保留 最前的一个性字,其余用“*”覆盖

(6)tirm 清空前后空白空格

4. 条件函数

4.1 if & ifnull

  (1) “RESEARCH” 部门发放“礼品A”,其余部门发放礼品“礼品B”,打印每名员工获得的礼品。

4.2 case -when- then

(1) SALES 部门去 P1 地点,ACCOUNTING 部门去 P2 地点,RESEARCH 部门去 P3 #地点,打印各部门员工的所去地

(2)update-bigDemo 调整薪资 


0. 前置总结

  • 数字函数
    • abs、round、floor
    • ceil、power、log
    • ln、 sqrt、 pi
    • sin、 cos、 tan
    • cot、 radians、 degrees
  • 字符函数
    • upper、 lower 、 char_length
    • concat、 instr
  • 日期函数 & 条件函数
    • now、 date_format、 date_add
    • datediff 、 if 、 ifnull

1. 数字函数

demo1:

# 数字函数# (1) abs --> 100
select abs(-100);# (2) round --> 3.1400
select round(3.1415 * 100)/100;# (3) floor --> 8
select floor(8.8);# (4) ceil --> 9
select ceil(8.1);# (5) power --> 32
select power(2,5);# (6) log --> 0.31546
select log(9, 2);# (7) ln --> 2.995
select ln(20);

demo2:

# (8) sqrt --> 4
select sqrt(16);# (9) pi --> 3.141593
select pi();# (10) sin --> 0.9092
select sin(2);# (11) cos --> 0.07073
select cos(1.5);# (12) tan --> 0.6420
select cot(1);# (13) radians --> 1.0471
select radians(60);# (14) degrees --> 57.29577
select degrees(1);

2. 日期函数

2.1 获取系统时间函数 now()、curdate()、curtime()

# 获取系统时间函数# (1) now()  --> 2025-07-30 15:10:48
select now();# (2) curdate()  --> 2025-07-30
select curdate();# (3) curtime()  --> 15:12:26
select curtime();

2.2 日期格式化函数 date_format

 (1) 查询员工的入职年份

### 日期格式化函数 date_format# (4) 查询员工的入职年份
select ename, date_format(hiredate, "%Y") as year
from t_emp
(2)利用日期函数, 查询今年、明年自己的生日是 星期几

# (5) 利用日期函数, 查询今年、明年自己的生日是 星期几
select date_format("2025-10-04", "%W") as this_year_bri, 
date_format("2026-10-04","%W") as next_year_bri;
(3)使用日期函数,查询1981年下半年 入职的员工

# (6) 使用日期函数,查询1981年下半年 入职的员工
select ename, hiredate
from t_emp
where  date_format(hiredate, "%Y") = 1981
and date_format(hiredate, "%m") >6;

2.3 日期偏移计算

(1)  查询 50 天后是 哪一天?

# (7) 查询 50 天后是 哪一天?
select date_add(now(), interval 50 day);

(2) 查询 2025-10-04 后 3个月后的9天 是哪一天?

# (8) 查询 2025-10-04 后 3个月后的9天 是哪一天?
select 
date_format(
date_add(
date_add(("2025-10-04"), interval + 3 month),
interval + 9 day),
"%Y/%m/%d");
(3) 查询 2026/01/13  与 2025-10-04相差多少天

# (9) 查询 2026/01/13  与 2025-10-04相差多少天
select datediff("2026-01-13", "2025-10-04"); 

3. 字符函数

(1)查询每个员工的大写、 小写姓名 、 姓名长度、 底薪后连接 “$”, 查找姓名中“A”中出现的位置

# 字符函数
# (1) 查询每个员工的大写、 小写姓名 、 姓名长度、 底薪后连接 “$”, 查找姓名中“A”中出现的位置
select 
lower(ename), upper(ename), length(ename), concat(sal, "$"), instr(ename, "A")
from t_emp
(2)  insert()和replace() 用法

(3)截取“你好呀,世界!”中的“世界”

# (3) 截取“你好呀,世界!”中的“世界”
select substr("你好呀,世界!", 5, 2), substring("你好呀,世界!", 5, 2);
(4)手机号的后四位 覆盖为 “*”

# (4) 手机号的后四位 覆盖为 “*”
select lpad(substring("15512345678", 8, 4), 11, "*");

(5) 将姓名进保留 最前的一个性字,其余用“*”覆盖

# (5) 将姓名进保留 最前的一个性字,其余用“*”覆盖
# base
select substring("剖好的为", 1, 1);
select rpad(substring("剖好的为", 1, 1), length("剖好的为")/3, "*");
(6)tirm 清空前后空白空格

4. 条件函数

4.1 if & ifnull

  (1) “RESEARCH” 部门发放“礼品A”,其余部门发放礼品“礼品B”,打印每名员工获得的礼品。

# 1. ifnull() & if( , , )
# (1) “RESEARCH” 部门发放“礼品A”,其余部门发放礼品“礼品B”,打印每名员工获得的礼品。
select em.ename, de.dname, if(de.dname = "RESEARCH", "礼品A", "礼品B")
from t_emp em join t_dept de 
on em.deptno = de.deptno

4.2 case -when- then

(1) SALES 部门去 P1 地点,ACCOUNTING 部门去 P2 地点,RESEARCH 部门去 P3 #地点,打印各部门员工的所去地

# (2) SALES 部门去 P1 地点
#     ACCOUNTING 部门去 P2 地点
#     RESEARCH 部门去 P3 #地点,打印各部门员工的所去地
select em.ename, de.dname, 
CASE WHEN de.dname = "SALES" THEN "P1"WHEN de.dname = "ACCOUNTING" THEN "P2"WHEN de.dname = "RESEARCH" THEN "P3"
END as place
from t_emp em join t_dept de 
on em.deptno = de.deptno
(2)update-bigDemo 调整薪资 

需求:

base:

# base0 查询各部门员工的工资
select em.ename, em.deptno, de.dname, em.sal
from t_emp em left join t_dept de
on em.deptno = de.deptno 
order by de.deptno # base1 分组查询每个部门的平均薪资
select  deptno, avg(sal) as avg
from t_emp em 
group by deptno# base2
select em.ename, em.deptno, de.dname, em.sal, de_av.avg
from t_emp em
left join t_dept de on em.deptno = de.deptno
left join (select  deptno, avg(sal) as avg from t_emp em group by deptno) de_av on em.deptno = de_av.deptno
order by de.deptno 

# update
UPDATE t_emp em 
LEFT JOIN t_dept de ON em.deptno = de.deptno
LEFT JOIN (SELECT deptno, AVG(sal) AS avg_sal FROM t_emp GROUP BY deptno
) de_av ON em.deptno = de_av.deptno
SET em.sal = CASE WHEN de.dname = "SALES" AND DATEDIFF(NOW(), em.hiredate)/365 >= 20 THEN em.sal * 1.1WHEN de.dname = "SALES" AND DATEDIFF(NOW(), em.hiredate)/365 < 20 THEN em.sal * 1.05WHEN de.dname = "ACCOUNTING" THEN em.sal + 500WHEN de.dname = "RESEARCH" AND em.sal < de_av.avg_sal THEN em.sal + 120WHEN em.deptno is null then em.sal + 100ELSE em.sal 
END;

http://www.dtcms.com/a/307752.html

相关文章:

  • 中央气象台 7 月 31 日 10 时继续发布暴雨黄色预警
  • 无人船 | 图解基于LQR控制的路径跟踪算法(以欠驱动无人艇Otter为例)
  • PHP 5.5 Action Management with Parameters (English Version)
  • 知识随记-----使用现代C++客户端库redis-plus-plus实现redis池缓解高并发
  • python之使用ffmpeg下载直播推流视频rtmp、m3u8协议实时获取时间进度
  • 26.(vue3.x+vite)以pinia为中心的开发模板
  • 【RH134 问答题】第 11 章 管理网络安全
  • Git踩坑
  • Spring面试
  • wpf之ControlTemplate
  • ACL 2024 大模型方向优秀论文:洞察NLP前沿​关键突破!
  • SpringMVC核心原理与实战指南
  • C++游戏开发(2)
  • 解决Android Studio中创建的模拟器第二次无法启动的问题
  • Android Studio怎么显示多排table,打开文件多行显示文件名
  • Android Studio 中Revert Commit、Undo Commit 和 Drop Commit 使用场景
  • 【智能体agent】入门之--1.初体验
  • HighgoDB查询慢SQL和阻塞SQL
  • 微信小程序性能优化与内存管理
  • HTTP 请求头(Request Headers)清单
  • 【13】大恒相机SDK C#开发 —— Fom1中实时处理的8个图像 实时显示在Form2界面的 pictureBox中
  • MySQL 中的聚簇索引和非聚簇索引的区别
  • 淘宝 API HTTP/2 多路复用与连接优化实践:提升商品数据采集吞吐量
  • Ceph、K8s、CSI、PVC、PV 深入详解
  • TTS语音合成|f5-tts语音合成服务器部署,实现http访问
  • 【n8n】如何跟着AI学习n8n【03】:HTTPRequest节点、Webhook节点、SMTP节点、mysql节点
  • 【11】大恒相机SDK C++开发 ——原图像数据IFrameData内存中上下颠倒,怎么裁剪ROI 实时显示在pictureBox中
  • 5G毫米波射频前端设计:从GaN功放到混合信号集成方案
  • 初始sklearn 数据集获取、分类、划分与特征工程
  • mysql笔记02:DML插入、更新、删除数据