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)