目录
- 最流行的查询需求分析08
- 演示数据准备的SQL
- 需求演示
- 日期相关的查询函数
- 46、查询各学生的年龄
- 使用 timestampdiff() 函数更精准
- 47、查询本周过生日的学生
- 简单写法:weekofyear
- 针对不规范日期格式的判断写法:
- 48、查询下周过生日的学生
- 49、查询本月过生日的学生
- 50、查询下月过生日的学生
最流行的查询需求分析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)