| 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)
SELECT
    DATE_ADD('2020-06-10', INTERVAL 10 DAY),
    DATE_ADD('2020-06-10', INTERVAL 10 HOUR)
SELECT
    DATE_ADD('2020-06-10 10:00:00', INTERVAL 10 HOUR),
    DATE_ADD('2020-06-10 10:00:00', INTERVAL 10 MINUTE)
SELECT
    DATE_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, 上面为列举的其他字符 | 
SELECT
    DATE_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)
SELECT
    DATE_SUB('2020-06-10', INTERVAL 10 DAY),
    DATE_SUB('2020-06-10', INTERVAL 10 HOUR)

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

SELECT
    DATE_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。
SELECT
    DATEDIFF('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');

SELECT
    DATEDIFF(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。
SELECT
    DAY('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。
SELECT
    DAYNAME('2024-02-21'),
    DAYNAME('2024-02-23'),
    DAYNAME(NOW()),
    DAYNAME('2024-02-00'),
    DAYNAME('2024-02-30'),
    DAYNAME('Not A DATE'),
    DAYNAME(NULL)

SELECT
    DAYNAME(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。
SELECT
    DAYOFMONTH('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。
SELECT
    DAYOFWEEK('2024-02-21'),
    DAYOFWEEK('2024-02-22'),
    DAYOFWEEK('2024-02-00'),
    DAYOFWEEK('2024-02-30'),
    DAYOFWEEK('Not A DATE'),
    DAYOFWEEK(NULL)




















