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

(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.xdnf.cn/news/16802.html

相关文章:

  • JVM问题分析处理手册
  • LeetCode 面试经典 150_数组/字符串_买卖股票的最佳时机(7_121_C++_简单)(贪心)
  • 【javascript】new.target 学习笔记
  • 【2025/07/31】GitHub 今日热门项目
  • DAY16-结构体
  • linux如何将两份hdmi edid合并
  • system.conf linux用于启动和管理系统进程的初始化系统和服务管理器的配置文件
  • WEditor:高效的移动端UI自动化脚本可视化编辑器
  • 【云故事探索】NO.16:阿里云弹性计算加速精准学 AI 教育普惠落地
  • 力扣 Pandas 挑战(6)---数据合并
  • 基于SpringBoot和SpringAI框架实践
  • Google政策大更新:影响金融,Ai应用,社交,新闻等所有类别App
  • 【科研绘图系列】R语言绘制线性相关性
  • 算法训练营day37 动态规划⑤ 完全背包 518. 零钱兑换 II、 377. 组合总和 Ⅳ、70. 爬楼梯 (进阶)
  • 排序的演进:从机械齿轮到领域专用芯片加速器的全面综述
  • 最新PS 2025安装包下载与安装教程(Adobe Photoshop 2025 )
  • 【数据结构初阶】--二叉树(六)
  • 乱删文件,电脑不能开机,怎么办
  • 【C语言】深度剖析指针(三):回调机制、通用排序与数组指针逻辑
  • DeepSeek笔记(三):结合Flask实现以WEB方式访问本地部署的DeepSeek-R1模型
  • opencv解迷宫
  • 是德科技的BenchVue和纳米软件的ATECLOUD有哪些区别?
  • RabbitMQ 的死信队列完整指南 (With Spring Boot)
  • 【13】大恒相机SDK C#开发 —— Fom1中实时处理的8个图像 实时显示在Form2界面的 pictureBox中
  • 多架构镜像整合全攻略:在Docker中实现单一镜像支持同时支持amd64和arm64架构
  • 贝锐蒲公英X4 Pro 5G新品路由器:异地组网+8网口+双频WiFi全都有
  • 网站域名备案和服务器有关系吗
  • 【源力觉醒 创作者计划】文心大模型开源:从封闭研发到生态共建的转折点
  • 设计模式:命令模式 Command
  • 【Java23种设计模式】:模板方法模式