日期时间函数主要用来显示有关日期和时间的信息。
声明
CURDATE()
说明
返回当前日期,不含时间部分。
例子
obclient> SELECT CURDATE();
+------------+
| CURDATE() |
+------------+
| 2018-05-05 |
+------------+
1 row in set (0.00 sec)
声明
CURRENT_DATE()
CURRENT_DATE
说明
同 CURDATE()
。
声明
CURRENT_TIME([scale])
说明
返回当前时间,不含日期部分。
scale
有效值为 0 到 6,表示微秒部分精度,默认值为 0。
例子
obclient> SELECT CURRENT_TIME(6);
+-----------------+
| CURRENT_TIME(6) |
+-----------------+
| 11:11:45.215311 |
+-----------------+
1 row in set (0.01 sec)
声明
CURRENT_TIMESTAMP([scale])
说明
返回当前日期时间,考虑时区设置。
scale
有效值为 0 到 6,表示微秒部分精度,默认值为 0。
例子
obclient> SELECT CURRENT_TIMESTAMP(6);
+----------------------------+
| CURRENT_TIMESTAMP(6) |
+----------------------------+
| 2018-05-05 11:35:39.177764 |
+----------------------------+
1 row in set (0.01 sec)
声明
CURTIME()
说明
同 CURRENT_TIME()
。
声明
DATE_ADD(date, INTERVAL expr unit)
说明
日期时间的算术计算。
date
表示日期时间基准,日期部分必选,时间部分可选。
expr
表示时间间隔,可以为负值。
unit
表示时间间隔单位。
以下为所有时间间隔单位列表:
单位 | 类型 | 含义 | 格式 |
---|---|---|---|
| 独立 | 微秒 |
|
| 独立 | 秒 |
|
| 独立 | 分钟 |
|
| 独立 | 小时 |
|
| 独立 | 天 |
|
| 独立 | 周 |
|
| 独立 | 月 |
|
| 独立 | 季度 |
|
| 独立 | 年 |
|
| 组合 | 秒到微秒 |
|
| 组合 | 分钟到微秒 |
|
| 组合 | 分钟到秒 |
|
| 组合 | 小时到微秒 |
|
| 组合 | 小时到秒 |
|
| 组合 | 小时到分钟 |
|
| 组合 | 天到秒 |
|
| 组合 | 天到分钟 |
|
| 组合 | 天到小时 |
|
| 组合 | 年到月 |
|
例子
obclient> SELECT
DATE_ADD(NOW(), INTERVAL 5 DAY),
DATE_ADD('2014-01-10', INTERVAL 5 MICROSECOND),
DATE_ADD('2014-01-10', INTERVAL 5 SECOND),
DATE_ADD('2014-01-10', INTERVAL 5 MINUTE),
DATE_ADD('2014-01-10', INTERVAL 5 HOUR),
DATE_ADD('2014-01-10', INTERVAL 5 DAY),
DATE_ADD('2014-01-10', INTERVAL 5 WEEK),
DATE_ADD('2014-01-10', INTERVAL 5 MONTH),
DATE_ADD('2014-01-10', INTERVAL 5 QUARTER),
DATE_ADD('2014-01-10', INTERVAL 5 YEAR),
DATE_ADD('2014-01-10', INTERVAL '5.000005' SECOND_MICROSECOND),
DATE_ADD('2014-01-10', INTERVAL '05:05.000005' MINUTE_MICROSECOND),
DATE_ADD('2014-01-10', INTERVAL '05:05' MINUTE_SECOND),
DATE_ADD('2014-01-10', INTERVAL '05:05:05.000005' HOUR_MICROSECOND),
DATE_ADD('2014-01-10', INTERVAL '05:05:05' HOUR_SECOND),
DATE_ADD('2014-01-10', INTERVAL '05:05' HOUR_MINUTE),
DATE_ADD('2014-01-10', INTERVAL '01 05:05:05.000005' DAY_MICROSECOND),
DATE_ADD('2014-01-10', INTERVAL '01 05:05:05' DAY_SECOND),
DATE_ADD('2014-01-10', INTERVAL '01 05:05' DAY_MINUTE),
DATE_ADD('2014-01-10', INTERVAL '01 05' DAY_HOUR),
DATE_ADD('2014-01-10', INTERVAL '1-01' YEAR_MONTH)
\G
*************************** 1. row ***************************
DATE_ADD(NOW(), INTERVAL 5 DAY): 2021-04-21 16:04:53
DATE_ADD('2014-01-10', INTERVAL 5 MICROSECOND): 2014-01-10 00:00:00.000005
DATE_ADD('2014-01-10', INTERVAL 5 SECOND): 2014-01-10 00:00:05
DATE_ADD('2014-01-10', INTERVAL 5 MINUTE): 2014-01-10 00:05:00
DATE_ADD('2014-01-10', INTERVAL 5 HOUR): 2014-01-10 05:00:00
DATE_ADD('2014-01-10', INTERVAL 5 DAY): 2014-01-15
DATE_ADD('2014-01-10', INTERVAL 5 WEEK): 2014-02-14
DATE_ADD('2014-01-10', INTERVAL 5 MONTH): 2014-06-10
DATE_ADD('2014-01-10', INTERVAL 5 QUARTER): 2015-04-10
DATE_ADD('2014-01-10', INTERVAL 5 YEAR): 2019-01-10
DATE_ADD('2014-01-10', INTERVAL '5.000005' SECOND_MICROSECOND): 2014-01-10 00:00:05.000005
DATE_ADD('2014-01-10', INTERVAL '05:05.000005' MINUTE_MICROSECOND): 2014-01-10 00:05:05.000005
DATE_ADD('2014-01-10', INTERVAL '05:05' MINUTE_SECOND): 2014-01-10 00:05:05
DATE_ADD('2014-01-10', INTERVAL '05:05:05.000005' HOUR_MICROSECOND): 2014-01-10 05:05:05.000005
DATE_ADD('2014-01-10', INTERVAL '05:05:05' HOUR_SECOND): 2014-01-10 05:05:05
DATE_ADD('2014-01-10', INTERVAL '05:05' HOUR_MINUTE): 2014-01-10 05:05:00
DATE_ADD('2014-01-10', INTERVAL '01 05:05:05.000005' DAY_MICROSECOND): 2014-01-11 05:05:05.000005
DATE_ADD('2014-01-10', INTERVAL '01 05:05:05' DAY_SECOND): 2014-01-11 05:05:05
DATE_ADD('2014-01-10', INTERVAL '01 05:05' DAY_MINUTE): 2014-01-11 05:05:00
DATE_ADD('2014-01-10', INTERVAL '01 05' DAY_HOUR): 2014-01-11 05:00:00
DATE_ADD('2014-01-10', INTERVAL '1-01' YEAR_MONTH): 2015-02-10
1 row in set (0.01 sec)
声明
DATE_FORMAT(date, format)
说明
将日期时间以指定格式输出。
date
表示日期时间。
format
表示输出格式。
以下为所有输出格式列表:
格式符 | 含义 | 格式 |
---|---|---|
| 星期的英文缩写。 |
|
| 月份的英文缩写。 |
|
| 月份的数字形式。 |
|
| 日的英文缩写。 |
|
| 日的数字形式。 |
|
| 日的数字形式。 |
|
| 微秒。 |
|
| 小时。 |
|
| 小时。 |
|
| 小时。 |
|
| 分钟。 |
|
| 一年中的第几天。 |
|
| 小时。 |
|
| 小时。 |
|
| 月份的英文名称。 |
|
| 月份的数字形式。 |
|
| 上午或下午。 |
|
| 12小时制时间。 |
|
| 秒。 |
|
| 秒。 |
|
| 24小时制时间。 |
|
| 一年中的第几周,周日为每周第一天。 |
|
| 一年中的第几周,周一为每周第一天。 |
|
| 一年中的第几周,周日为每周第一天(和 |
|
| 一年中的第几周,周一为每周第一天(和 |
|
| 星期的英文名称。 |
|
| 一周中的第几天。 |
|
| 一周所属的年份,周日为每周第一天(和 | |
| 一周所属的年份,周一为每周第一天(和 | |
| 四位年份。 | |
| 两位年份。 | |
| 文字字符,输出一个 |
例子
obclient> SELECT
DATE_FORMAT('2014-01-01', '%Y-%M-%d'),
DATE_FORMAT('2014-01-01', '%X-%V'),
DATE_FORMAT('2014-01-01', '%U')
\G
*************************** 1. row ***************************
DATE_FORMAT('2014-01-01', '%Y-%M-%d'): 2014-January-01
DATE_FORMAT('2014-01-01', '%X-%V'): 2013-52
DATE_FORMAT('2014-01-01', '%U'): 00
1 row in set (0.01 sec)
声明
DATE_SUB(date, INTERVAL expr unit)
说明
日期时间的算术计算。
请参考 DATE_ADD()
。
声明
DATEDIFF(date1, date2)
说明
返回 date1
和 date2
之间的天数。
计算中只用到参数的日期部分,忽略时间部分。
例子
obclient> SELECT DATEDIFF('2015-06-19','1994-12-17');
+-------------------------------------+
| DATEDIFF('2015-06-19','1994-12-17') |
+-------------------------------------+
| 7489 |
+-------------------------------------+
1 row in set (0.01 sec)
声明
EXTRACT(unit FROM date)
说明
以整数类型返回 date
的指定部分值。如果指定多个部分,则将所有值按顺序拼接。
unit
请参考 DATE_ADD()
。当 unit
为 WEEK
时,请参考 DATE_FORMAT()
的 %U
说明。
例子
obclient> SELECT EXTRACT(WEEK FROM '2013-01-01'),
EXTRACT(WEEK FROM '2013-01-06'),
EXTRACT(YEAR_MONTH FROM '2012-03-09'),
EXTRACT(DAY FROM NOW())\G;
*************************** 1. row ***************************
EXTRACT(WEEK FROM '2013-01-01'): 0
EXTRACT(WEEK FROM '2013-01-06'): 1
EXTRACT(YEAR_MONTH FROM '2012-03-09'): 201203
EXTRACT(DAY FROM NOW()): 16
1 row in set (0.00 sec)
声明
FROM_DAYS(N)
说明
返回指定天数 N
对应的 DATE
值。天数指距离 0000-01-01
的天数。
例子
obclient> SELECT FROM_DAYS(736271), FROM_DAYS(700000);
+-------------------+-------------------+
| FROM_DAYS(736271) | FROM_DAYS(700000) |
+-------------------+-------------------+
| 2015-11-04 | 1916-07-15 |
+-------------------+-------------------+
1 row in set (0.00 sec)
声明
FROM_UNIXTIME(unix_timestamp)
FROM_UNIXTIME(unix_timestamp, format)
说明
不指定 format
参数时,返回 DATETIME
类型值,不考虑时区。
指定 format
参数时,返回指定格式的日期时间字符串。
unix_timestamp
指 UNIX 时间戳,即距离 1970-01-01 00:00:00.000000
的微秒数。
format
支持的格式已在 DATE_FORMAT()
说明 中列出。
例子
obclient> SELECT FROM_UNIXTIME(UNIX_TIMESTAMP(), '%Y %D %M %h:%i:%s %x');
+---------------------------------------------------------+
| FROM_UNIXTIME(UNIX_TIMESTAMP(), '%Y %D %M %h:%i:%s %x') |
+---------------------------------------------------------+
| 2018 5th May 08:41:26 2018 |
+---------------------------------------------------------+
1 row in set (0.01 sec)
声明
MONTH(date)
说明
返回 date
的月份信息。
例子
obclient> SELECT MONTH('2008-02-03');
+---------------------+
| MONTH('2008-02-03') |
+---------------------+
| 2 |
+---------------------+
1 row in set (0.01 sec)
声明
NOW([scale])
说明
同 CURRENT_TIMESTAMP()
。
声明
PERIOD_DIFF(p1, p2)
说明
以月份位单位返回两个日期之间的间隔。日期只能包含年月信息,格式只能为 YYYYMM
或 YYMM
。
例子
obclient> SELECT PERIOD_DIFF(200802, 200703);
+----------------------------+
| PERIOD_DIFF(200802,200703) |
+----------------------------+
| 11 |
+----------------------------+
1 row in set (0.01 sec)
声明
STR_TO_DATE(str, format)
说明
使用 format
将 str
转换为 DATETIME
值、DATE
值、或 TIME
值。返回值类型取决于 format
包含日期时间的哪些部分。
format
支持的格式已在 DATE_FORMAT()
说明 中列出。
例子
obclient> SELECT STR_TO_DATE('2014-Jan-1st 5:5:5 pm', '%Y-%b-%D %r');
+-----------------------------------------------------+
| STR_TO_DATE('2014-Jan-1st 5:5:5 pm', '%Y-%b-%D %r') |
+-----------------------------------------------------+
| 2014-01-01 05:05:05 |
+-----------------------------------------------------+
1 row in set (0.01 sec)
声明
TIME(datetime)
说明
以 TIME
类型返回 datetime
的时间信息。
例子
obclient> SELECT TIME('2003-12-31 01:02:03');
+-----------------------------+
| TIME('2003-12-31 01:02:03') |
+-----------------------------+
| 01:02:03.000000 |
+-----------------------------+
1 row in set (0.01 sec)
声明
TIME_TO_USEC(date)
说明
将 date
值转换为距离 1970-01-01 00:00:00.000000
的微秒数,考虑时区信息。
date
可以表示日期,也可以表示日期时间。
例子
obclient> SELECT TIME_TO_USEC('2014-03-25'), TIME_TO_USEC(NOW());
+----------------------------+---------------------+
| TIME_TO_USEC('2014-03-25') | TIME_TO_USEC(NOW()) |
+----------------------------+---------------------+
| 1395676800000000 | 1525528100000000 |
+----------------------------+---------------------+
1 row in set (0.01 sec)
声明
TIMEDIFF(date1, date2)
说明
以 TIME
类型返回两个日期时间的时间间隔。
例子
obclient> SELECT
TIMEDIFF('2015-06-06 12:12:12', '2014-06-05 11:11:11'),
TIMEDIFF('2015-06-06 12:12:12', '2015-06-05 11:11:11')
\G
*************************** 1. row ***************************
TIMEDIFF('2015-06-06 12:12:12', '2014-06-05 11:11:11'): 838:59:59
TIMEDIFF('2015-06-06 12:12:12', '2015-06-05 11:11:11'): 25:01:01
1 row in set (0.00 sec)
声明
TIMESTAMPDIFF(unit, date1, date2)
说明
以 unit
为单位返回两个日期时间的间隔。unit
只能为 DATE_ADD()
中的独立单位。
例子
obclient> SELECT
TIMESTAMPDIFF(SECOND, NOW(), '2011-01-01 11:11:11'),
TIMESTAMPDIFF(DAY, '2011-01-01 11:11:11', NOW())
\G
*************************** 1. row ***************************
TIMESTAMPDIFF(SECOND, NOW(), '2011-01-01 11:11:11'): -231677498
TIMESTAMPDIFF(DAY, '2011-01-01 11:11:11', NOW()): 2681
1 row in set (0.00 sec)
声明
TIMESTAMPADD(unit, interval_expr, date)
说明
日期时间的算术计算。
同 DATE_ADD()
,但 unit
只能为独立单位。
例子
obclient> SELECT
TIMESTAMPADD(DAY, -5, '2010-01-01 00:00:00'),
DATE_ADD('2010-01-01 00:00:00', INTERVAL -5 DAY)
\G
*************************** 1. row ***************************
TIMESTAMPADD(DAY, -5, '2010-01-01 00:00:00'): 2009-12-27 00:00:00
DATE_ADD('2010-01-01 00:00:00', INTERVAL -5 DAY): 2009-12-27 00:00:00
1 row in set (0.01 sec)
声明
TO_DAYS(date)
说明
返回指定 date
值对应的天数。天数指距离 0000-01-01
的天数。
例子
obclient> SELECT TO_DAYS('2015-11-04'), TO_DAYS('20151104');
+-----------------------+---------------------+
| TO_DAYS('2015-11-04') | TO_DAYS('20151104') |
+-----------------------+---------------------+
| 736271 | 736271 |
+-----------------------+---------------------+
1 row in set (0.01 sec)
声明
USEC_TO_TIME(usec)
说明
将 usec
值转换为 TIMESTAMP
类型值。
usec
表示距离 1970-01-01 00:00:00.000000
的微秒数,考虑时区信息。
例子
obclient> SELECT USEC_TO_TIME(1);
+----------------------------+
| USEC_TO_TIME(1) |
+----------------------------+
| 1970-01-01 08:00:00.000001 |
+----------------------------+
1 row in set (0.00 sec)
声明
UNIX_TIMESTAMP()
UNIX_TIMESTAMP(date)
说明
不指定 date
参数时,返回当前时间距离 '1970-01-01 00:00:00' 的秒数,考虑时区。
指定 date
参数时,返回指定时间距离 '1970-01-01 00:00:00' 的秒数,考虑时区。
例子
obclient> SELECT UNIX_TIMESTAMP(), TIME_TO_USEC(NOW());
+------------------+---------------------+
| UNIX_TIMESTAMP() | TIME_TO_USEC(NOW()) |
+------------------+---------------------+
| 1525570561 | 1525570561000000 |
+------------------+---------------------+
1 row in set (0.01 sec)
obclient> SELECT UNIX_TIMESTAMP('1997-10-04 22:23:00');
+---------------------------------------+
| UNIX_TIMESTAMP('1997-10-04 22:23:00') |
+---------------------------------------+
| 875974980 |
+---------------------------------------+
1 row in set (0.01 sec)
声明
UTC_TIMESTAMP()
说明
返回当前 UTC 时间。
例子
obclient> SELECT UTC_TIMESTAMP();
+---------------------+
| UTC_TIMESTAMP() |
+---------------------+
| 2018-05-06 01:38:32 |
+---------------------+
1 row in set (0.01 sec)
声明
YEAR(date)
说明
返回 date
值的年份信息。
例子
obclient> SELECT YEAR('1987-01-01');
+--------------------+
| YEAR('1987-01-01') |
+--------------------+
| 1987 |
+--------------------+
1 row in set (0.00 sec)