精华内容
下载资源
问答
  • mysql:查询本周及下周过生日学生
    千次阅读
    2021-05-09 20:06:29

    本周过生日的学生

    select c1.sid,c1.sname from
    (
    select sid,sname,DATEDIFF(CURDATE(),ADDDATE(sage,INTERVAL year(curdate()) - year(sage) year)) diff from Student
    ) c1
    where c1.diff <= DAYOFWEEK(curdate())+ 5 and c1.diff >= DAYOFWEEK(curdate())-1 ;
    

    下周过生日的学生

    select c1.sid,c1.sname from
    (
    select sid,sname,DATEDIFF(CURDATE(),ADDDATE(sage,INTERVAL year(curdate()) - year(sage) year)) diff from Student
    ) c1
    where c1.diff <= DAYOFWEEK(curdate())-2 and c1.diff >= DAYOFWEEK(curdate())-8;
    
    更多相关内容
  • 就这短短一个小问,本人汗颜,花了近两个小时才搞明白,具体步骤如下,望指正!...    最后就是排查学生生日的月份和天数在这两个日期之间的人,本人就是一直在这里卡壳了,首先我直接想取出月份

    就这短短一个小问,本人汗颜,花了近两个小时才搞明白,具体步骤如下,望指正!
    1、表内容
    在这里插入图片描述
        首先考虑什么是下周:现在可以得到的是现在的时间,current_data(),在通过dayofweek可以知道现在是周几。
        确定星期几之后,就要弄清楚从今天到下周一差了几天,经过测试可以发现用9减去星期数在加上当前日期就可以得到下周一的日期,然后在用date_add(),就可以计算出下周日的日期
        最后就是排查学生生日的月份和天数在这两个日期之间的人,本人就是一直在这里卡壳了,首先我直接想取出月份和天数,这个是可以用正则regexp_extract,也可以用日期格式化输出date_format(),只去‘M-d’。当然这里还比较容易想,但最关键的就是用后者取出来的数据不能直接用month和day单独取出对应位置上的数,所有这之后我又想到是不是可以把月份和天数截取出来,再转为Int类型或者字符串类型直接进行比较:collect_list(cast(regexp_replace(birthday,’-’,’’) as int)),这样处理之后的确将月份和天数拼接成了一个字符串或者转化为了一个数值,但是由于一些不可知的原因,转换之后的数不能通过常规方法,即大于小于或者between,and比较,最终也只能放弃。
        好在脑子没有一直糊涂下去,最后我发现,其实并不需要把月份或天数取出来或者进行拼接等诸如此类的操作,仅仅只需要,在日期状态下,直接用month和day取出对应月份和天数,在和birthday中的月份,天数进行比较即可。(需要注意的就是,下周也可能出现跨月份的情况,需要详情考虑)
    具体代码如下:

    select
    name,birthday
    from
    (
    select
    next_monday,date_add(next_monday,6) next_sunday
    from
    (
    select date_add(current_date(),9-dayofweek(current_date())) as next_monday
    )A
    )B,student
    where
    month(birthday)>=month(next_monday)
    and
    month(birthday)<=month(next_sunday)
    and
    (
    day(birthday)>=day(next_monday)
    or
    day(birthday)<=day(next_sunday)
    )
    ;
    

    结果:
    在这里插入图片描述

    展开全文
  • MySql查询本周或下周过生日的人

    千次阅读 2020-05-25 22:46:25
    做题思路,先将学生生日年份统一成当前时间的年份,这样就可以直接用相差的天数判断是否本周或者下周过生日了 首先还是来建表加数据吧 -- 创建表格 create table student( s_id varchar(20) not null, s_name ...

    这几题我想了很久,因此记录一下.
    做题思路,先将学生的生日年份统一成当前时间的年份,这样就可以直接用相差的天数判断是否本周或者下周过生日了
    首先还是来建表加数据吧

    -- 创建表格
    create table student(
    	s_id varchar(20) not null,
    	s_name varchar(255) not null default '',
    	s_birth varchar(20) not null default '',
    	s_sex varchar(10) not null default ''
    )
    
    -- 插入数据
    INSERT INTO student VALUES 
    ('01','赵雷','1990-01-01','男'),
    ('02','钱电','1990-12-21','男'),
    ('03','孙风','1990-05-20','男'),
    ('04','李云','1990-08-06','男'),
    ('05','周梅','1991-12-01','女'),
    ('06','吴兰','1992-03-01','女'),
    ('07','郑竹','1989-07-01','女'),
    ('08','王菊','1990-01-20','女'),
    ('09','张飞','1990-9-25','男'),
    ('10','刘备','1990-01-25','男'),
    ('11','关羽','1990-01-25','男'),
    ('12','金毛狮王','1850-05-24','男'),
    ('13','黄蓉','1890-05-31','女'),
    ('14','郭靖','1990-06-06','男'),
    ('15','潇潇','1995-06-07','女');
    

    1.查询本周过生日的学生

    select A.s_id,A.s_name from 
    (
    select s_id,s_name,DATEDIFF(CURDATE(),ADDDATE(s_birth,INTERVAL year(curdate()) - year(s_birth) year)) diff from student
    ) A
    where A.diff < DAYOFWEEK(curdate()) and A.diff >= DAYOFWEEK(curdate()) - 7;
    
    -- 结果展示
    +------+----------+
    | s_id | s_name   |
    +------+----------+
    | 12   | 金毛狮王 |
    +------+----------+
    

    2.查询下周过生日的学生

    select A.s_id,A.s_name from 
    (
    select s_id,s_name,DATEDIFF(ADDDATE(s_birth,INTERVAL year(curdate()) - year(s_birth) year),CURDATE()) diff from student
    ) A
    where A.diff > (7 - DAYOFWEEK(curdate()))  and A.diff <= 14 - DAYOFWEEK(curdate());
    
    -- 结果展示
    +------+--------+
    | s_id | s_name |
    +------+--------+
    | 13   | 黄蓉   |
    | 14   | 郭靖   |
    +------+--------+
    
    展开全文
  • 头一次遇到这个问题,想了好久(由于对于mysql的日期参数不熟悉),随后在网上查询,发现网上的解法千奇百怪,评论区也频频翻车,争论不断,主要原因是算法中存在考虑不周的问题。这种错误主要可以总结为一下几点:...

    代码搬运工路过,MySQL小白,请多指教!

    CHAP 1.

    头一次遇到这个问题,想了好久(由于对于mysql的日期参数不熟悉),随后在网上查询,发现网上的解法千奇百怪,评论区也频频翻车,争论不断,主要原因是算法中存在考虑不周的问题。这种错误主要可以总结为一下几点:直接计算周数不考虑年份

    这样的解法看似没有很大问题,甚至基于巧合可能在数据量较小的情况下测试集可以完全通过,但是存在不小的隐患。例如:1994年的11月14日 为1994年的第47周 星期1

    2020年的11月14日 为2020年的第46周 星期6

    因此若有人为1994年11月14日出生,按照2020年计算应该在2020年第46周(当前周)过生日,但是如果直接计算周数不考虑年份的化如下所示,则会产生不在此周过生日的结论。

    当然此现象这和函数选取周几作为一周的开始密切相关,但是不论选择周日为一周的第一天还是周一作为一周的第一天,总会找到如上不同年份相同日月周数恰好错开一周的情况。因此此情况较为难以发现,在未使用大量数据之前,只有偶发的可能性。

    select * from student

    where WEEKOFYEAR(student.Sage)=WEEKOFYEAR(CURDATE());

    [代码源](https://www.jianshu.com/p/476b52ee4f1b)直接利用天数计算周始周末

    在得到当前天所对应的周数时,认为当前天-7即为本周的开始,存在鲜明的bug。例如:假设当前日期为2020年11月11日,则周始周末应该为:正确的: 2020年11月8日(46周) ---> 2020年11月14日(46周)

    错误的: 2020年11月4日(45周) ---> 2020年11月11日(46周)

    因此将-7作为周始周末区间作为判断的一定会存在问题,代码示例如下:最后一部的where条件中将DAYOFWEEK(CURDATE())和DAYOFWEEK(CURDATE())-7作为一周的开始结束。但是下方的语句已经将不同年份的日期统一转换至当前年份的,避免了第一种隐形错误。

    SELECT A.sid,A.sname FROM

    (SELECT sid,sname,

    DATEDIFF(CURDATE(),ADDDATE(sage,INTERVAL YEAR(CURDATE()) - YEAR(sage) YEAR)) diff

    FROM student) A

    WHERE A.diff < DAYOFWEEK(CURDATE()) AND A.diff >= DAYOFWEEK(CURDATE()) - 7;

    [代码源](https://blog.csdn.net/programmer_trip/article/details/106342314)

    CHAP 2.

    个人采用的解题思路综合以上两种,取长补短:首先转换不同年份的日期统一转换至当前年份,其次使用week/weekofyear函数与当前日期周比较,便可得到当前周生日的人,若要求下周或者下个月直接当前周/月后面+1即可:

    首先初始化表,代码如下:

    create table Student(SId varchar(10),Sname varchar(10),Sage datetime,Ssex varchar(10));

    insert into Student values('01' , '赵雷' , '1990-01-01' , '男');

    insert into Student values('02' , '钱电' , '1990-12-21' , '男');

    insert into Student values('03' , '孙风' , '1990-12-20' , '男');

    insert into Student values('04' , '李云' , '1990-12-06' , '男');

    insert into Student values('05' , '周梅' , '1991-12-01' , '女');

    insert into Student values('06' , '吴兰' , '1992-01-01' , '女');

    insert into Student values('07' , '郑竹' , '1989-01-01' , '女');

    insert into Student values('09' , '张三' , '2017-12-20' , '女');

    insert into Student values('10' , '李四' , '2017-12-25' , '女');

    insert into Student values('11' , '李四' , '2012-06-06' , '女');

    insert into Student values('12' , '赵六' , '2013-06-13' , '女');

    insert into Student values('13' , '孙七' , '2014-06-01' , '女');

    查询本周过生日的学生

    SELECT * FROM student

    WHERE WEEK(CONCAT(YEAR(CURDATE()),"-" ,MID(sage,6,5))) = WEEK(NOW())

    # 1、选取原生日里的月日成分(按照字符串进行处理)

    # >>> MID(sage,6,5)

    # 2、将选取的月日成分与今年的年份相接

    # >>> CONCAT(YEAR(CURDATE()),"-" ,MID(sage,6,5))

    # 3、使拼接后的日期的周数和 now/curdate 的周数相等即可确定本周过生日

    查询下周过生日的学生

    SELECT * FROM student AS s

    WHERE WEEK(CONCAT(YEAR(CURDATE()),"-",MID(s.sage,6,5))) = WEEK(CURDATE())+1

    # 原理同41

    查询本月/下月过生日的学生

    SELECT * FROM student AS s

    WHERE MONTH(CONCAT(YEAR(CURDATE()),"-",MID(s.sage,6,5))) = MONTH(CURDATE())

    # 改用 month函数,查询下月过生日则+1

    CHAP 3.

    不知道还存在那些潜在的逻辑漏洞,欢迎大家批评指证!

    展开全文
  • MySQL 查询本周过生日的人 select * from STUDENT where MID(student_age, 6, 5) in (MID(date_sub(curdate(), INTERVAL WEEKDAY(curdate()) + 1 DAY), 6, 5), MID(date_sub(curdate(), INTERVAL WEEKDAY(curdate...
  • current_datea:当前时间 select * from Student where WEEKOFYEAR(CONCAT ( DATE_FORMAT(CURRENT_DATE,'%Y'), '-',DATE_FORMAT(Sage,'%m-%d') ) ) = WEEKOFYEAR(CURRENT_DATE) 查询下周过生日的同学 select * from ...
  • 【SQL】SQL面试50题 分类梳理与解答​zhuanlan.zhihu.com其中最后的52题比较有意思(写出52题,那53题就不成问题了),题目大意是:从学生信息表(student)中通过出生日期字段(sage)查询出本周过生日的同学。...
  • 今天公司要我做一个 下载当天过生日的 人的照片 的功能, 这个sql写了半天…记录一下: ...查询指定日期过生日的数据 , 日期为前台传来的数据 select a.birthday from 表名 a where to_char( a.birthday, 'M...
  • mysql 查询本周、上周、本月、上个月份的数据 mysql 查询本周、上周、本月、上个月份的数据 mysql 查询本周、上周、本月、上个月份的数据
  • 49、查询本月过生日学生 49.1、查询下月过生日学生 50、查询本周过生日学生 50.1、查询下周过生日学生 前篇(1)和(2) SQL 经典50题(题目+解答)(1) SQL 经典50题(题目+解答)(2) 题解 32、查询平均...
  • SQL50题中选取以下编号...1.查询" 01 "课程比" 02 "课程成绩高的学生的信息及课程分数 查询同时存在"01"课程和"02"课程的情况 SELECT student.sname,student.sage,student.ssex,course.cname,sc.score from sc ...
  • MySQL 查询练习(50题) MySQL 查询练习(50题) I 1 -- 建表 1 1.1 -- 学生表 1 1.2 -- 课程表 1 ...49 -- 48、查询下周过生日学生 16 50 -- 49、查询本月过生日学生 16 51 -- 50、查询下月过生日学生 16
  • 经典50题 26~50题答案

    2019-11-01 17:51:00
    25、查询各科成绩前三名的记录三个语句 select s.* from ( select s_id,coure_id,score, rank()over(partition by coure_id order by score desc) a, row_number()over(partition by coure_id order by score desc) ...
  • 3 -- 查询下周过生日学生 select s_name from student where date_format(s_age, '%m-%d') between date_format(subdate(curdate(),weekday(curdate())-7),'%m-%d') and date_format(subdate(curdate(),weekday...
  • 头一次遇到这个问题,想了好久(由于对于mysql的日期参数不熟悉),随后在网上查询,发现网上的解法千奇百怪,评论区也频频翻车,争论不断,主要原因是算法中存在考虑不周的问题。这种错误主要可以总结为一下几点:...
  • 查询下周过生日学生 解题思路: 分析题目:“周数” 第一步:锁定表,学生表 第二步:使用WEEK()函数查询 SELECT * FROM student WHERE WEEK(Sage) = WEEK(NOW())+1; 44.查询本月过生日学生 解题思路: 分析题目:...
  • //本款sql 语句可以查询,本周,本月,下周,下月生日的相关数据sql 统计本周,本月,下周,下月sql语句/*表结构Student(S#,Sname,Sage,Ssex) --S# 学生编号,Sname 学生姓名,Sage 出生年月,Ssex 学生性别保存一些...
  • 下面这个是题目所用到的数据库! 首先你需要在你的SQL Sever数据库中创建[TestDb]这个数据库,接下来下面这个代码。直接复制在数据库里运行就好了! ... 3 /****** Object: Table [dbo].[Course] Script Date: ...
  • 经典sql练习题(oracle版)

    千次阅读 2019-07-17 10:05:39
    Sid 学生学号,Sname 学生姓名,Sage 出生年月,Ssex 学生性别 课程表 Course(Cid,Cname,Tid) Cid 课程编号,Cname 课程名称,T# 教师编号 教师表 Teacher(Tid,Tname) Tid 教师编号,Tname 教师姓名 成绩表 SC(Sid,Cid,...
  • sql经典40题(上)

    2020-08-19 16:18:08
     查询下周过生日学生 select sid, sname, sage from Student where weekofyear(sage) = weekofyear(date_add(curdate(),interval 1 week)); 24. 查询本月过生日学生 ---mysql select sid, sname, sage from ...
  • 关于学生课程分数的SQL查询

    千次阅读 2021-04-06 13:27:53
    学生表:student(s_id,s_name,s_birth,s_sex) ——学生编号,学生姓名, 出生年月,学生性别 课程表:course(c_id,c_name,t_id) ——课程编号, 课程名称, 教师编号 教师表:teacher(t_id,t_name)——教师编号,教师姓名 ...
  • MySQL数据库查询练习题

    千次阅读 2021-02-02 13:27:27
    练习题目查询" 01 "课程比" 02 "课程成绩高的学生的信息及课程分数1.1 查询同时存在" 01 "课程和" 02 "课程的情况1.2 查询存在" 01 "课程但可能不存在" 02 "课程的情况(不存在时显示为 null )1.3 查询不存在" 01 ...
  • #1、查询"01"课程比"02"课程成绩高的学生的信息及课程分数SELECT c.*,a.s_score,b.s_scoreFROM score AS a,score AS b,student AS cWHERE c.s_id=a.s_id AND a.s_id=b.s_id AND a.c_id=‘01‘AND b.c_id=‘02‘AND a...
  • Mysql 学生信息经典50题

    千次阅读 2021-01-21 05:05:54
    学生表Student(SId,Sname,Sage,Ssex)--SId 学生编号,Sname 学生姓名,Sage 出生年月,Ssex 学生性别--2.课程表Course(CId,Cname,TId)--CId --课程编号,Cname 课程名称,TId 教师编号--3.教师表Teacher(TId,Tname)--TId ...
  • sql练习学生成绩查询实践

    千次阅读 2019-06-28 18:53:51
    --SId 学生编号,Sname 学生姓名,Sage 出生年月,Ssex 学生性别 --2.课程表 Course(CId,Cname,TId) --CId 课程编号,Cname 课程名称,TId 教师编号 --3.教师表 Teacher(TId,Tname) --TId 教师编号,Tname 教师姓名 ...
  • 版权声明:本文为博主原创文章,遵循CC 4.0 by-sa版权协议,转载请附上原文出处链接和本声明。...年龄减一 32、查询本周过生日学生 33、查询下周过生日学生 34、查询本月过生日学生 35、查询下月过生日学生
  • 查询结果按人数降序排列,若人数相同,按课程号升序排列 44、检索至少选修两门课程的学生学号 45、查询选修了全部课程的学生信息 46、查询学生的年龄 47、查询本周过生日学生 48、查询下周过生日学生 ...
  • MySQL 关于年龄、生日的7道查询题目

    千次阅读 2018-12-03 21:08:23
    创建学生信息表 create table Student( s_id varchar(20), s_name varchar(20) not null default'', s_birth varchar(20) not null default'', s_sex varchar(10) not null default'', primary key(s_.....

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 1,305
精华内容 522
关键字:

查询下周过生日的学生