本文主要是介绍MySQL -- 08_最流行的查询需求分析(日期相关、生日、年份距离等~),希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!
目录
- 最流行的查询需求分析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 studentselect 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*
fromstudent
whereweekofyear(str_to_date(concat( year ( now()), -- 获取当前年份:2024date_format( s_birth, '%m%d' ) -- 把每个学生的生日的月份和天数), '%Y%m%d' -- 通过 concat 把两个值合并成这个年月日格式) -- 把不规范的字符串日期格式化) -- 获取学生生日日期所在的周是今年的第几个周= weekofyear(now()) -- 获取当前日期是今年的第几个周-- 格式化:SELECT*
FROMstudent
WHEREweekofyear( 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*
FROMstudent
WHEREweekofyear( 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)
这篇关于MySQL -- 08_最流行的查询需求分析(日期相关、生日、年份距离等~)的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!