(六)日时函数
1、日时函数概览
| 函数 | 功能 |
|---|---|
| NOW, SYSDATE, CURRENT_DATE | 当前日时 |
| WEEK,WEEKOFYEAR | 日期的周数 |
| LAST_DAY | 日期月份的最后一天 |
| DATE_FORMAT | 日期格式化 |
| ADD_MONTHS 、DATE_ADD、DATE_SUB | 日期偏移 |
| DATEDIFF、TIMESTAMPDIFF | 日期差值 |
| YEAR,MONTH,DAY,WEEKDAY | 提取日时元素:年、月、日,星期等 |
| EXTRACT | 提取日时元素:年、月、日及其组合等 |
2、当前日时函数:
(1) 获得当前日期和时间:
NOW(), SYSDATE(), CURRENT_DATETIME()
(2) 获得当前日期:
CURRENT_DATE(), CURDATE()
(3) 获得当前时间(注意:输出结果不带日期):
CURRENT_TIME()
小贴士:NOW 和 SYSDATE 函数的区别
① SYSDATE 返回的是该函数执行时的日期时间。
② NOW 返回的是语句开始执行的日期时间,在语句执行结束前不会变化。
执行以下 SQL,我们就能很清晰理解 SYSDATE 和 NOW 函数的区别:
SELECT NOW(), SYSDATE(), SLEEP(3), NOW(), SYSDATE()
3、WEEK (date[,mode]):
功能:返回日期的周数。
参数:缺省参数 mode 值从 0 到 9。
|模式|周的起始天|范围|说明|
|--|--|--|--|
|0|Sunday|0~53|遇到本年的第一个周日开始,是第一周。前面的计算为第0周|
|1|Monday|0~53|若第一周能超过3天,那么计算为本年的第一周。否则为第0周|
|2|Sunday|1~53|遇到本年的第一个周日开始,是第一周|
|3|Monday|1~53|假如第一周能超过3天,那么计算为本年的第一周。否则为上年度的第5x周|
|4|Sunday|0~53|若第一周能超过3天,那么计算为本年的第一周。否则为第0周|
|5|Monday|0~53|遇到本年的第一个星期一开始,是第一周|
|6|Sunday|1~53|假如第一周能超过3天,那么计算为本年的第一周。否则为上年度的第5x周|
|7|Monday|1~53|遇到本年的第一个星期一开始,是第一周|
|8|Sunday|1~54|周日算一周的开始,并且只要有一天就算一周|
|9|Monday|1~54|周一算一周的开始,并且只要有一天就算一周|
这么多模式记住常用的一两个即可,未来使用时根据项目需求以本章作为手册查询。我们挑两个模式分析下 mode 的含义。
|函数调用|返回值|注解|
|--|--|--|
WEEK('2022-1-1', 3)|52|模式 3:周一算一周的开始,这天是周六,第一周没有超过3天,<br>则结果为上年度的第52周|
WEEK('2022-1-1', 9)|1|模式 9:周一算一周的开始,按照规则只要有一天就算一周,<br>则结果为第1周|
4、WEEKOFYEAR (date) :
功能:返回日期的周数:1 ~ 53,等价于 WEEK 函数的 mode 3
```sql
WEEKOFYEAR('2021-1-1') # 第 52 周
WEEK('2021-1-1', 3) # 第 52 周
5、LAST_DAY (date) :
功能:返回月份日期的最后一天。
| 函数调用 | 返回值 | 注解 |
|---|---|---|
| LAST_DAY(‘2019-2-10’) | 2019-02-28 | 可以用来判断平闰年 |
| LAST_DAY(‘2020-2-10 12:10:30’) | 2020-02-29 | 不会理会时间 |
| LAST_DAY(‘19-5-10’) | 2019-05-31 | 19被视作2019 |
| LAST_DAY(‘190510’) | 2019-05-31 | 19被视作2019 |
| LAST_DAY(‘2022-2-30’) | NULL | 不存在的日期 |
| LAST_DAY(‘0000-01-01’) | NULL | 不存在的年份 |
6、DATE_FORMAT(date, <格式符号>):
功能:日期类型数据的格式化。
以下是所有“格式符号”个描述——
| 格式 | 描述 |
|---|---|
| %a | 星期名的英文缩写形式(Sun…Sat) |
| %b | 月份的英文缩写形式(Jan…Dec) |
| %c | 月份的数字形式(0…12) |
| %D | 有英文后缀的某月的第几天(1st,2nd,3rd…) |
| %d | 月份中的天数,数字形式(00…31) |
| %e | 月份中的天数,数字形式(0…31) |
| %f | 微秒 |
| %H | 小时,24小时制(00…23) |
| %h | 小时,12小时制(0,1…12) |
| %I | 小时,12小时制,个位数字前加0(01…12) |
| %i | 分钟,数字形式(00…59) |
| %j | 一年中的天数(001…366) |
| %k | 小时,24小时制(0…23) |
| %l | 小时,12小时制(1…12) |
| %M | 月份,英文形式全拼(January…December) |
| %m | 月份,数字形式(00…12) |
| %p | AM或PM |
| %r | 时间,12小时制(HH:MI:SS后面紧跟AM或PM) |
| %S | 秒(00…59) |
| %s | 秒(00…59) |
| %T | 时间,24小时(HH:MI:SS) |
| %U | 星期(00…53),星期日是一个星期的第一天 |
| %u | 星期(00…53),星期一是一个星期的第一天 |
| %V | 星期(01…53),星期日是一周的第一天。与%X一起使用 |
| %v | 星期(01…53),星期一是一周的第一天。与%x一起使用 |
| %W | 星期名的英文全拼形式(Sunday…Saturday) |
| %w | 一星期中的哪一天(0=Sunday…6=Saturday) |
| %X | 以4位数字形式反映周所在的年份,星期日周的第一天 |
| %x | 同 %X |
| %Y | 4位数字形式表达的年份 |
| %y | 2位数字形式表达的年份 |
| %% | 一个 % |
示例:
| 函数调用 | 返回值 |
|---|---|
| DATE_FORMAT(NOW(), ‘%Y年%m月%d日’) | 2022年03月19日 |
| DATE_FORMAT(‘2022-03-11’, ‘%W %M %Y’) | Friday March 2022 |
| DATE_FORMAT(‘2021-03-19 10:38:59’, ‘%H:%i:%s’) | 10:38:59 |
实际应用中 DATE_FORMAT 函数的第一个参数一般是 datetime / date 类型的。格式符号记住几种常用的组合即可,项目上更多需要时可以查阅以上表格。
最后修改时间:2023-09-14 16:18:21
「喜欢这篇文章,您的关注和赞赏是给作者最好的鼓励」
关注作者
【版权声明】本文为墨天轮用户原创内容,转载时必须标注文章的来源(墨天轮),文章链接,文章作者等基本信息,否则作者和墨天轮有权追究责任。如果您发现墨天轮中有涉嫌抄袭或者侵权的内容,欢迎发送邮件至:contact@modb.pro进行举报,并提供相关证据,一经查实,墨天轮将立刻删除相关内容。




