MySQL -- 08_最流行的查询需求分析(日期相关、生日、年份距离等~)

本文详细介绍了如何使用SQL中的日期函数如timestampdiff()和WEEKOFYEAR来精确查询学生的年龄以及检查本周、下周、本月和下月过生日的学生。通过示例展示了如何处理不规范日期格式并进行相应的计算。
摘要由CSDN通过智能技术生成

最流行的查询需求分析08


演示数据准备的SQL


演示数据准备的SQL


需求演示


日期相关的查询函数

获取当前日期,返回 年月日,格式为:2024-04-05
select CURDATE();

在这里插入图片描述


46、查询各学生的年龄

使用 timestampdiff() 函数更精准

在这里插入图片描述


在这里插入图片描述

-- 46、查询各学生的年龄

select *,YEAR(now()) - YEAR(s_birth) '年龄' from student


select st.*,timestampdiff(YEAR,st.s_birth,CURDATE()) '年龄' from student st



47、查询本周过生日的学生

思路:查询每个学生生日日期是当前年份的第几周,然后跟当前日期是当前年份的第几周进行对比,如果相等,说明是本周过生日。


简单写法:weekofyear

在这里插入图片描述

select * from student where WEEKOFYEAR(s_birth) = WEEKOFYEAR(NOW())

针对不规范日期格式的判断写法:

在这里插入图片描述

sql 格式化下:
在这里插入图片描述

-- 47、查询本周过生日的学生

-- 修改一条数据,让一个学生的生日是今天,CURRENT_DATE 返回当前年月日
UPDATE student set s_birth = CURRENT_DATE where s_id = '01'


select * from student 

select
	* 
from
	student 
where
  
	weekofyear(
	
		str_to_date(
		
			concat( 
			
				year ( now()), -- 获取当前年份:2024
				date_format( s_birth, '%m%d' ) -- 把每个学生的生日的月份和天数
				
			), '%Y%m%d' -- 通过 concat 把两个值合并成这个年月日格式
			
		) -- 把不规范的字符串日期格式化
		
	) -- 获取学生生日日期所在的周是今年的第几个周
	
	= weekofyear(now()) -- 获取当前日期是今年的第几个周

-- 格式化:

SELECT
	* 
FROM
	student 
WHERE
	weekofyear( str_to_date( concat( YEAR ( now()), date_format( s_birth, '%m%d' ) ), '%Y%m%d' ) ) = weekofyear(now())




48、查询下周过生日的学生

针对不规范日期格式的判断写法:
在这里插入图片描述

简单的写法:

在这里插入图片描述


-- 48、查询下周过生日的学生

-- interval '7' day 给指定日期加 7 天, day就是+天数,month +月份,year +年份
select now(), now() + interval '7' day

-- 把今天生日的01号学生,再次修改为下周生日
UPDATE student set s_birth = now() + interval '7' day  where s_id = '01'

select * from student 

-- 和第47到一样,就是多了 【 + interval '7' day 】 

SELECT
	* 
FROM
	student 
WHERE
	weekofyear( str_to_date( concat( YEAR ( now()), date_format( s_birth, '%m%d' ) ), '%Y%m%d' ) ) = weekofyear(now() + interval '7' day)



-- 简单写法:

select * from student where weekofyear(s_birth) = weekofyear(now() + interval '7' day)



49、查询本月过生日的学生

在这里插入图片描述

-- 49、查询本月过生日的学生

-- 查当前月份
select month(now())

-- 获取每个学生生日的月份
select *,month(s_birth) from student 

select * from  student where month(now()) = month(s_birth)



50、查询下月过生日的学生

只需要当前日期再加一个月,等于学生生日的月份即可。

在这里插入图片描述

-- 50、查询下月过生日的学生

-- 当前日期
select now();

-- 当前日期再加一个月
select now() + interval '1' month;

select * from  student 

select * from  student where month(now() + interval '1' month) = month(s_birth)


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

_L_J_H_

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

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

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

打赏作者

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

抵扣说明:

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

余额充值