梁韵莹

2020-07-03   阅读量: 1415

MySQL 日期时间类函数

SQL日期时间函数温习

扫码加入数据分析学习群

在学习PB的2周抽了碎片时间复盘了进阶SQL的50题,感觉开头和结尾的题目难度高,中间的题目相对基础些。

考核日期时间函数的题目主要集中在结尾的47-50一共4题,今天收尾也顺便温习了对应的函数知识,笔记整理如下:


知识点:

A. 格式转换型

1. Date(‘20200101’)=2020-01-01 返回指定表达式的日期部分或将文本转为日期格式

2. Date_Format(date, format) 根据format字符串中可用标识符转化date值

image.png

B. 返回指定日期特定值型

2. Week(date, mode) 返回指定日期是一年中的第几周

Week(‘2020-01-01’,1) = 1 -- 代表2020-01-01在2020年的第一周

3. Year(date) 返回指定日期的年份

Year(‘20-01-01’)=2020

4. Month(date) 返回指定日期中的月

5. Day(date) 返回指定日期中的日

6. Hour(datetime) 返回指定时间的小时

C. 直接返回特定值(无指定日期)

7. Curdate() 以‘yyyy-mm-dd’或’yyyymmdd’格式返回当前日期值

8. Curtime() 以‘h:mm:ss’或hhmmss格式返回当前时间

9. Now() 以‘yyyy-mm-dd hh:mm:ss’或yyyymmddhhmmss格式返回当前日期&时间

D. 返回天数

10. DateDiff(expr1,expr2) 返回结束日expr1和起始期expr2之间的天数


E.日期时间加减运算

12. 加法 Date_Add(date, interval expr type) = AddDate(date, interval expr type)

13. 减法 Date_Sub(date, interval expr type) = SubDate(date, interval expr type)

(date, interval expr type)解读

- date值: datetime 或 date值

- expr值: 对date进行加减法的一个表达式字符串,例如1 或 -1

- type值: 指明expr的如何被解释

举例: date_add(‘2020-01-01’, interval 1 day); -- 在2020-01-01的基础上加1天

Date_sub(‘2020-01-01’, interval 1 day); -- 在2020-01-01 的基础上减1天

对应练习题:

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

#看看如今是这周的周几(周日为0,周一为1,...):

select date_format(now(),'%w');

#本周的第一天

select date_sub(curdate(),interval date_format(curdate(),'%w') day);

#本周的最后一天

select date_add(curdate(),interval 6-date_format(curdate(),'%w') day);

select *

from stu

where date_format(s_birth,'2020-%m-%d') between date_sub(curdate(),interval date_format(curdate(),'%w') day) and date_add(curdate(),interval 6-date_format(curdate(),'%w') day);

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

#现在离下一周还有多少天?

select 7-date_format(now(),'%w');

#下周的第一天

select date_add(curdate(),interval 7-date_format(curdate(),'%w') day);

#下周的最后一天

select date_add(curdate(),interval 7-date_format(curdate(),'%w')+6 day);

select *

from stu

where date_format(s_birth,'2020-%m-%d') between date_add(curdate(),interval 7-date_format(curdate(),'%w') day) and date_add(curdate(),interval 7-date_format(curdate(),'%w')+6 day);

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

-- 错误写法:

select * from stu where month(s_birth)=month(curdate())+1;

错误缘由:没有考虑如果本月是12月下一个月就返回1月的情况

-- 也是正确但是复杂化的写法

select * from stu where month(s_birth)=if(month(curdate())<12,month(date_add(curdate(), interval 1 month)),1);

-- 参考答案简化写法:

select * from stu where month(s_birth)=if(month(curdate())=12,1,month(curdate())+1);

22.0006 4 3 关注作者 收藏

评论(0)


暂无数据

推荐课程

推荐帖子