文档
- https://www.w3schools.cn/sql/sql_ref_mysql.html
- https://dev.mysql.com/doc/refman/8.0/en/built-in-function-reference.html
目录
- 获取日期时间
- 日期属性
- 日期计算
- ADDDATE
- DATE_ADD
- DATE_SUB
- DATEDIFF
- MONTH
- MONTHNAME
- DATE_FORMAT
获取日期时间
函数 |
描述 |
NOW |
返回当前日期和时间 |
CURDATE |
返回当前日期 |
CURRENT_DATE |
返回当前日期 |
CURRENT_TIME |
返回当前时间 |
CURRENT_TIMESTAMP |
返回当前日期和时间 |
CURTIME |
返回当前时间 |
LOCALTIME |
返回当前日期和时间 |
LOCALTIMESTAMP |
返回当前日期和时间 |
SYSDATE |
返回当前日期和时间 |
FROM_DAYS |
从数字日期值返回日期 |
MAKEDATE |
根据年份和天数值创建并返回日期 |
MAKETIME |
根据小时、分钟和秒值创建并返回时间 |
SEC_TO_TIME |
根据指定的秒数返回一个时间值 |
STR_TO_DATE |
根据字符串和格式返回日期 |
TIMESTAMP |
根据日期或日期时间值返回一个日期时间值 |
日期属性
函数 |
描述 |
DATE_FORMAT |
格式化日期 |
TIME_FORMAT |
按指定格式格式化时间 |
EXTRACT |
从给定日期提取部分 |
DATE |
从日期时间表达式中提取日期部分 |
TIME |
从给定时间/日期时间中提取时间部分 |
YEAR |
返回给定日期的年份部分 |
QUARTER |
返回给定日期值的一年中的季度 |
MONTH |
返回给定日期的月份部分 |
MONTHNAME |
返回给定日期的月份名称 |
DAYOFMONTH / DAY |
返回给定日期的月份日期 |
HOUR |
返回给定日期的小时部分 |
MINUTE |
返回时间/日期时间的分钟部分 |
SECOND |
返回时间/日期时间的秒部分 |
MICROSECOND |
返回时间/日期时间的微秒部分 |
TIME_TO_SEC |
将时间值转换为秒 |
DAYOFYEAR |
返回给定日期的一年中的哪一天 |
DAYOFWEEK |
返回给定日期的星期索引 |
WEEKDAY |
返回给定日期的星期编号 |
DAYNAME |
返回给定日期的星期名称 |
WEEK |
返回给定日期的周数 |
WEEKOFYEAR |
返回给定日期的周数 |
YEARWEEK |
返回给定日期的年和周数 |
TO_DAYS |
返回日期和日期"0000-00-00"之间的天数 |
日期计算
函数 |
描述 |
ADDDATE |
将时间/日期间隔添加到日期,然后返回日期 |
ADDTIME |
将时间间隔添加到时间/日期时间,然后返回时间/日期时间 |
DATEDIFF |
返回两个日期值之间的天数 |
DATE_ADD |
将时间/日期间隔添加到日期,然后返回日期 |
DATE_SUB |
从日期中减去时间/日期间隔,然后返回日期 |
PERIOD_ADD |
将指定的月数添加到期间 |
PERIOD_DIFF |
返回两个句点之间的差 |
SUBDATE |
从日期中减去时间/日期间隔,然后返回日期 |
SUBTIME |
从日期时间中减去一个时间间隔,然后返回时间/日期时间 |
TIMEDIFF |
返回两个时间/日期时间表达式之间的差异 |
LAST_DAY |
提取给定日期当月的最后一天 |
ADDDATE
将时间/日期间隔添加到日期,然后返回日期
语法
ADDDATE(date, INTERVAL value addunit)
- addunit常用值
- YEAR
- MONTH
- DAY
- HOUR
- MINUTE
- SECOND
示例
mysql> SELECT ADDDATE("2017-06-15", INTERVAL 10 DAY);
+----------------------------------------+
| ADDDATE("2017-06-15", INTERVAL 10 DAY) |
+----------------------------------------+
| 2017-06-25 |
+----------------------------------------+
DATE_ADD
将时间/日期间隔添加到日期,然后返回日期
语法
DATE_ADD(date, INTERVAL value addunit)
- addunit常用值
- YEAR
- MONTH
- DAY
- HOUR
- MINUTE
- SECOND
SELECT DATE_ADD("2017-06-15", INTERVAL 2 DAY);
+----------------------------------------+
| DATE_ADD("2017-06-15", INTERVAL 2 DAY) |
+----------------------------------------+
| 2017-06-17 |
+----------------------------------------+
DATE_SUB
从日期中减去时间/日期间隔,然后返回日期
语法
DATE_SUB(date, INTERVAL value interval)
- addunit常用值
- YEAR
- MONTH
- DAY
- HOUR
- MINUTE
- SECOND
示例
SELECT DATE_SUB("2017-06-15", INTERVAL 2 DAY);
+----------------------------------------+
| DATE_SUB("2017-06-15", INTERVAL 2 DAY) |
+----------------------------------------+
| 2017-06-13 |
+----------------------------------------+
DATEDIFF
返回两个日期值之间的天数
语法
DATEDIFF(date1, date2)
示例
SELECT DATEDIFF("2017-01-10", "2017-01-01");
+--------------------------------------+
| DATEDIFF("2017-01-10", "2017-01-01") |
+--------------------------------------+
| 9 |
+--------------------------------------+
MONTH
返回给定日期的月份部分(从 1 到 12 的数字)
语法
MONTH(date)
示例
mysql> SELECT MONTH("2017-06-15");
+---------------------+
| MONTH("2017-06-15") |
+---------------------+
| 6 |
+---------------------+
MONTHNAME
返回给定日期的月份名称
语法
MONTHNAME(date)
示例
mysql> SELECT MONTHNAME("2017-06-15");
+-------------------------+
| MONTHNAME("2017-06-15") |
+-------------------------+
| June |
+-------------------------+
示例
-- 返回当前日期
mysql> SELECT CURDATE();
+------------+
| CURDATE() |
+------------+
| 2023-10-24 |
+------------+
-- 返回当前日期
mysql> SELECT CURRENT_DATE();
+----------------+
| CURRENT_DATE() |
+----------------+
| 2023-10-24 |
+----------------+
-- 返回当前时间
mysql> SELECT CURRENT_TIME();
+----------------+
| CURRENT_TIME() |
+----------------+
| 11:39:45 |
+----------------+
-- 返回当前时间
mysql> SELECT CURTIME();
+-----------+
| CURTIME() |
+-----------+
| 11:40:44 |
+-----------+
-- 返回当前日期和时间
mysql> SELECT CURRENT_TIMESTAMP();
+---------------------+
| CURRENT_TIMESTAMP() |
+---------------------+
| 2023-10-24 11:40:12 |
+---------------------+
-- 返回当前日期和时间
mysql> SELECT LOCALTIME();
+---------------------+
| LOCALTIME() |
+---------------------+
| 2023-10-24 14:09:55 |
+---------------------+
-- 返回当前日期和时间
mysql> SELECT LOCALTIMESTAMP();
+---------------------+
| LOCALTIMESTAMP() |
+---------------------+
| 2023-10-24 14:10:22 |
+---------------------+
-- 返回当前日期和时间
mysql> SELECT NOW();
+---------------------+
| NOW() |
+---------------------+
| 2023-10-24 14:12:47 |
+---------------------+
-- 返回当前日期和时间
mysql> SELECT SYSDATE();
+---------------------+
| SYSDATE() |
+---------------------+
| 2023-10-24 14:17:24 |
+---------------------+
-- 提取日期部分
mysql> SELECT DATE("2017-06-15 09:34:21");
+-----------------------------+
| DATE("2017-06-15 09:34:21") |
+-----------------------------+
| 2017-06-15 |
+-----------------------------+
-- 从时间表达式中提取时间部分
mysql> SELECT TIME("2017-08-15 19:30:10");
+-----------------------------+
| TIME("2017-08-15 19:30:10") |
+-----------------------------+
| 19:30:10 |
+-----------------------------+
-- 返回给定日期的年份部分(从 1000 到 9999 的数字)
mysql> SELECT YEAR("2017-06-15");
+--------------------+
| YEAR("2017-06-15") |
+--------------------+
| 2017 |
+--------------------+
-- 返回给定日期的小时部分
mysql> SELECT HOUR("2017-06-20 09:34:00");
+-----------------------------+
| HOUR("2017-06-20 09:34:00") |
+-----------------------------+
| 9 |
+-----------------------------+
-- 从给定日期提取部分
SELECT EXTRACT(MONTH FROM "2017-06-15");
+----------------------------------+
| EXTRACT(MONTH FROM "2017-06-15") |
+----------------------------------+
| 6 |
+----------------------------------+
-- 返回给定日期的月份日期,等于 DAY() 函数
mysql> SELECT DAYOFMONTH("2017-06-15");
+--------------------------+
| DAYOFMONTH("2017-06-15") |
+--------------------------+
| 15 |
+--------------------------+
-- 返回某个日期的工作日索引
-- 1=星期日,2=星期一,3=星期二,4=星期三,5=星期四,6=星期五,7=星期六
mysql> SELECT DAYOFWEEK("2017-06-15");
+-------------------------+
| DAYOFWEEK("2017-06-15") |
+-------------------------+
| 5 |
+-------------------------+
-- 返回日期的工作日编号
-- 0 = 星期一,1 = 星期二,2 = 星期三,3 = 星期四,4 = 星期五,5 = 星期六,6 = 星期日
mysql> SELECT WEEKDAY("2017-06-15");
+-----------------------+
| WEEKDAY("2017-06-15") |
+-----------------------+
| 3 |
+-----------------------+
-- 返回给定日期的星期名称
mysql> SELECT DAYNAME("2017-06-15");
+-----------------------+
| DAYNAME("2017-06-15") |
+-----------------------+
| Thursday |
+-----------------------+
-- 返回给定日期的一年中的哪一天(从 1 到 366 的数字)
mysql> SELECT DAYOFYEAR("2017-06-15");
+-------------------------+
| DAYOFYEAR("2017-06-15") |
+-------------------------+
| 166 |
+-------------------------+
-- 返回时间/日期时间的微秒部分(从 0 到 999999)
mysql> SELECT MICROSECOND("2017-06-20 09:34:00.000023");
+-------------------------------------------+
| MICROSECOND("2017-06-20 09:34:00.000023") |
+-------------------------------------------+
| 23 |
+-------------------------------------------+
-- 返回时间/日期时间的分钟部分(从 0 到 59)
mysql> SELECT MINUTE("2017-06-20 09:34:00");
+-------------------------------+
| MINUTE("2017-06-20 09:34:00") |
+-------------------------------+
| 34 |
+-------------------------------+
-- 提取给定日期该月的最后一天
mysql> SELECT LAST_DAY("2017-06-20");
+------------------------+
| LAST_DAY("2017-06-20") |
+------------------------+
| 2017-06-30 |
+------------------------+
-- 返回给定日期值(从 1 到 4 的数字)的一年中的季度
mysql> SELECT QUARTER("2017-06-15");
+-----------------------+
| QUARTER("2017-06-15") |
+-----------------------+
| 2 |
+-----------------------+
-- 返回时间/日期时间的秒部分(从 0 到 59)
mysql> SELECT SECOND("23:59:59");
+--------------------+
| SECOND("23:59:59") |
+--------------------+
| 59 |
+--------------------+
DATE_FORMAT
按指定格式化日期
语法
DATE_FORMAT(date, format)
格式 |
描述 |
%a |
工作日的缩写名称(周日至周六) |
%b |
缩写月份名称(1 月至 12 月) |
%c |
数字月份名称(0 到 12) |
%D |
以数字形式表示的月份中的日期,后跟后缀 (1st, 2nd, 3rd, …) |
%d |
以数值表示的月份中的日期(01 到 31) |
%e |
以数字形式表示的月份中的日期(0 到 31) |
%f |
微秒(000000 到 999999) |
%H |
小时(00 到 23) |
%h |
小时(00 到 12) |
%I |
小时(00 到 12) |
%i |
分钟(00 到 59) |
%j |
一年中的某一天(001 到 366) |
%k |
小时(0 到 23) |
%l |
小时(1 到 12) |
%M |
完整的月份名称(1 月至 12 月) |
%m |
数字形式的月份名称(00 到 12) |
%p |
上午或下午 |
%r |
12 小时 AM 或 PM 格式的时间 (hh:mm:ss AM/PM) |
%S |
秒(00 到 59) |
%s |
秒(00 到 59) |
%T |
24 小时制时间 (hh:mm:ss) |
%U |
星期天是一周的第一天(00 到 53) |
%u |
星期一是一周的第一天的星期(00 到 53) |
%V |
星期天是一周的第一天(01 到 53)。与 %X 一起使用 |
%v |
星期一是一周的第一天的星期(01 到 53)。与 %X 一起使用 |
%W |
完整的工作日名称(周日至周六) |
%w |
星期天=0,星期六=6 |
%X |
星期天是一周的第一天的星期。与 %V 一起使用 |
%x |
星期一是一周的第一天的一周的年份。与 %V 一起使用 |
%Y |
4 位数字形式的年份 |
%y |
2 位数字形式的年份 |
示例
mysql> SELECT DATE_FORMAT("2017-06-01 09:01:02", "%Y-%m-%d %H:%i:%s");
+---------------------------------------------------------+
| DATE_FORMAT("2017-06-01 09:01:02", "%Y-%m-%d %H:%i:%s") |
+---------------------------------------------------------+
| 2017-06-01 09:01:02 |
+---------------------------------------------------------+