MySQL 【日期】函数大全(二)
| DATE_ADD | DATE_FORMAT | DATE_SUB | DATEDIFF |
| DAY | DAYNAME | DAYOFMONTH | DAYOFWEEK |
1、DATE_ADD
DATE_ADD(date, value) :在指定的日期/时间上加上指定的时间间隔加并返回新的日期/时间。
DATE_ADD(date, value)
DATE_ADD(date, INTERVAL value unit)
date:需要操作的日期。
value:时间/日期间隔。正数和负数都是允许的。
unit:时间/日期间隔的单位。
间隔单位:
|
| SECOND | MINUTE | HOUR |
DAY | WEEK | MONTH | QUARTER |
YEAR | SECOND_MICROSECOND | MINUTE_MICROSECOND | MINUTE_SECOND |
HOUR_MICROSECOND | HOUR_SECOND | HOUR_MINUTE | DAY_MICROSECOND |
DAY_SECOND | DAY_MINUTE | DAY_HOUR | YEAR_MONTH |
- 如果
date参数是DATE类型,并且时间间隔为YEAR,MONTH或者DAY,返回DATE。- 如果
date参数是DATE类型,并且时间间隔为HOURS,MINUTES或者SECONDS,返回DATETIME。- 如果
date参数是DATETIME类型,返回DATETIME。- 如果
date参数是TIME类型,并且时间间隔为YEAR,MONTH或者DAY,返回DATETIME。- 如果
date参数是TIME类型,并且计算只涉及HOURS,MINUTES和SECONDS部分,返回TIME。(开始于 MySQL 8.0.28)
SELECTDATE_ADD('2020-06-10', INTERVAL 10 DAY),DATE_ADD('2020-06-10', INTERVAL 10 HOUR)

SELECTDATE_ADD('2020-06-10 10:00:00', INTERVAL 10 HOUR),DATE_ADD('2020-06-10 10:00:00', INTERVAL 10 MINUTE)

SELECTDATE_ADD(CURDATE(), INTERVAL 10 HOUR),DATE_ADD(NOW(), INTERVAL 10 MINUTE)

2、DATE_FORMAT
DATE_FORMAT(date, format) :按照指定的格式格式化日期时间。
| 符号 | 说明 |
|---|---|
%a | 星期的缩写 (Sun..Sat) |
%b | 月份的缩写 (Jan..Dec) |
%c | 月份数字 (0..12) |
%D | 带有英语前缀的月份中的每天 (0th, 1st, 2nd, 3rd, …) |
%d | 月份中的每天的两位数字表示 (00..31) |
%e | 月份中的每天的数字表示 (0..31) |
%f | 微秒 (000000..999999) |
%H | 小时 (00..23) |
%h | 小时 (01..12) |
%I | 小时 (01..12) |
%i | 分钟 (00..59) |
%j | 一年中的每天 (001..366) |
%k | 小时 (0..23) |
%l | 小时 (1..12) |
%M | 月份名称 (January..December) |
%m | 两位数字月份 (00..12) |
%p | AM 或者 PM |
%r | 十二小时制时间 (hh:mm:ss 后跟 AM 或 PM) |
%S | 秒 (00..59) |
%s | 秒 (00..59) |
%T | 二十四小时制时间 (hh:mm:ss) |
%U | 一年中的星期 (00..53), 每周的开始是星期天; WEEK() 函数中的 mode 0 |
%u | 一年中的星期 (00..53), 每周的开始是星期一; WEEK() 函数中的 mode 1 |
%V | 一年中的星期 (01..53), 每周的开始是星期天; WEEK() 函数中的 mode 2, 用于 %X |
%v | 一年中的星期 (01..53), 每周的开始是星期一; WEEK() 函数中的 mode 3, 用于 %x |
%W | 星期的名称 (Sunday..Saturday) |
%w | 星期中的每天 (0=星期天..6=星期六) |
%X | 一年中的星期,每周的开始是星期天,四位数字,用于 %V |
%x | 一年中的星期,每周的开始是星期一,四位数字,用于 %v |
%Y | 四位数字年份 |
%y | 两位数字年份 |
%% | 转义 % |
%x | x, 上面为列举的其他字符 |
SELECTDATE_FORMAT('2022-02-28', '%Y'),DATE_FORMAT('2014-02-28', '%W'),DATE_FORMAT('2022-02-01', '%M %d, %Y'),DATE_FORMAT('2022-02-01', '%M %e %Y'),DATE_FORMAT('2022-02-28', '%W, %M %e, %Y')

SELECT NOW(), DATE_FORMAT(NOW(), '%Y/%m/%d %H:%i:%S')

3、DATE_SUB
DATE_SUB(date, INTERVAL value unit) :在指定的日期/时间上减去指定到时间间隔加并返回新的日期/时间。
date:需要操作的日期。
days:在date上减去的天数。
value:时间/日期间隔。正数和负数都是允许的。
unit:时间/日期间隔的单位。
间隔单位:
|
| SECOND | MINUTE | HOUR |
DAY | WEEK | MONTH | QUARTER |
YEAR | SECOND_MICROSECOND | MINUTE_MICROSECOND | MINUTE_SECOND |
HOUR_MICROSECOND | HOUR_SECOND | HOUR_MINUTE | DAY_MICROSECOND |
DAY_SECOND | DAY_MINUTE | DAY_HOUR | YEAR_MONTH |
- 如果
date参数是DATE类型,并且时间间隔为YEAR,MONTH或者DAY,返回DATE。- 如果
date参数是DATE类型,并且时间间隔为HOURS,MINUTES或者SECONDS,返回DATETIME。- 如果
date参数是DATETIME类型,返回DATETIME。- 如果
date参数是TIME类型,并且时间间隔为YEAR,MONTH或者DAY,返回DATETIME。- 如果
date参数是TIME类型,并且计算只涉及HOURS,MINUTES和SECONDS部分,返回TIME。(开始于 MySQL 8.0.28)
SELECTDATE_SUB('2020-06-10', INTERVAL 10 DAY),DATE_SUB('2020-06-10', INTERVAL 10 HOUR)

SELECTDATE_SUB('2020-06-10 10:00:00', INTERVAL 10 HOUR),DATE_SUB('2020-06-10 10:00:00', INTERVAL 10 MINUTE)

SELECTDATE_SUB(CURDATE(), INTERVAL 10 HOUR),DATE_SUB(NOW(), INTERVAL 10 MINUTE)

4、DATEDIFF
DATEDIFF(date1, date2) :返回两个日期值之间的天数。
DATEDIFF()函数只比较date1和date2的日期部分。如果date1的日期晚于date2的日期,它返回一个正数,否则返回一个负数或者 0。- 如果指定的表达式不是一个合法的日期或者日期时间,
DATEDIFF()函数将返回NULL。- 如果参数为
NULL,DATEDIFF()函数将返回NULL。
SELECTDATEDIFF('2022-02-28', '2022-02-28') AS A,DATEDIFF('2022-02-28', '2022-02-28 10:10:10') AS B,DATEDIFF('2022-02-28 10:10:10', '2022-02-28') AS C,DATEDIFF('2022-02-28', '2022-02-27') AS D,DATEDIFF('2022-02-28', '2022-02-27 10:10:10') AS E,DATEDIFF('2022-02-28 10:10:10', '2022-02-27') AS F,DATEDIFF('2022-02-30', '2022-02-28 10:10:10') AS G,DATEDIFF('Not A DATEDIFF', 'Not A DATEDIFF') AS H,DATEDIFF(NULL, '2022-02-28') AS I

SELECT DATEDIFF(NOW(), '2024-02-28');

SELECTDATEDIFF(NOW(), '2024-02-28'),DATEDIFF(CURDATE(), '2024-02-28'),DATEDIFF(CURRENT_DATE(), '2024-02-28'),DATEDIFF(SYSDATE(), '2024-02-28')

5、DAY
DAY(expr) :返回日期时间表达式中的代表月份中的一天的数字。此函数等同于 DAYOFMONTH() 函数。
- 代表月份中的一天的数字,从 1 到 31。
- 如果给定的日期的天的部分为 0 ,比如:
'0000-00-00'和'2008-00-00',DAY()函数将返回0。- 如果指定的表达式不是一个合法的日期或者日期时间,
DAY()函数将返回NULL。- 如果参数为
NULL,DAY()函数将返回NULL。
SELECTDAY('2022-02-28'),DAY('2022-02-28 10:10:10'),DAY(NOW()),DAY('2022-02-00'),DAY('2022-02-30'),DAY('Not A DATE'),DAY(NULL)

6、DAYNAME
DAYNAME(expr) :返回给定日期的工作日名称。
- 返回值将是以下值中的一个:
Monday,Tuesday,Wednesday,Thursday,Friday,Saturday,Sunday。- 如果指定的表达式不是一个合法的日期或者日期时间,
DAYNAME()函数将返回NULL。- 如果参数为
NULL,DAYNAME()函数将返回NULL。
SELECTDAYNAME('2024-02-21'),DAYNAME('2024-02-23'),DAYNAME(NOW()),DAYNAME('2024-02-00'),DAYNAME('2024-02-30'),DAYNAME('Not A DATE'),DAYNAME(NULL)

SELECTDAYNAME(NOW()),DAYNAME(CURDATE()),DAYNAME(CURRENT_DATE()),DAYNAME(SYSDATE())

7、DAYOFMONTH
DAYOFMONTH(expr) :返回日期时间表达式中的代表月份中的一天的数字。此函数等同于DAY() 函数。
- 代表月份中的一天的数字,从 1 到 31。
- 如果给定的日期的天的部分为 0 ,比如:
'0000-00-00'和'2008-00-00',DAY()函数将返回0。- 如果指定的表达式不是一个合法的日期或者日期时间,
DAY()函数将返回NULL。- 如果参数为
NULL,DAY()函数将返回NULL。
SELECTDAYOFMONTH('2022-02-28'),DAYOFMONTH('2022-02-28 10:10:10'),DAYOFMONTH(NOW()),DAYOFMONTH('2024-02-00'),DAYOFMONTH('2022-02-30'),DAYOFMONTH('Not A DATE'),DAYOFMONTH(NULL)

8、DAYOFWEEK
DAYOFWEEK(expr) :返回给定日期的工作日的索引。
返回一个从
1到7之间的数字,代表的含义如下:
1- 星期天2- 星期一3- 星期二4- 星期三5- 星期四6- 星期五7- 星期六如果指定的表达式不是一个合法的日期或者日期时间,
DAYOFWEEK()函数将返回NULL。如果参数为
NULL,DAYOFWEEK()函数将返回NULL。
SELECTDAYOFWEEK('2024-02-21'),DAYOFWEEK('2024-02-22'),DAYOFWEEK('2024-02-00'),DAYOFWEEK('2024-02-30'),DAYOFWEEK('Not A DATE'),DAYOFWEEK(NULL)

