全部产品

日期时间函数

日期时间函数主要用来显示有关日期和时间的信息。

CURDATE

声明

CURDATE()

说明

返回当前日期,不含时间部分。

例子

obclient> SELECT CURDATE();
+------------+
| CURDATE()  |
+------------+
| 2018-05-05 |
+------------+
1 row in set (0.00 sec)

CURRENT_DATE

声明

CURRENT_DATE()
CURRENT_DATE

说明

CURDATE()

CURRENT_TIME

声明

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

声明

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

声明

CURTIME()

说明

CURRENT_TIME()

DATE_ADD

声明

DATE_ADD(date, INTERVAL expr unit)

说明

日期时间的算术计算。

  • date 表示日期时间基准,日期部分必选,时间部分可选。

  • expr 表示时间间隔,可以为负值。

  • unit 表示时间间隔单位。

以下为所有时间间隔单位列表:

单位

类型

含义

格式

MICROSECOND

独立

微秒

MICROSECONDS

SECOND

独立

SECONDS

MINUTE

独立

分钟

MINUTES

HOUR

独立

小时

HOURS

DAY

独立

DAYS

WEEK

独立

WEEKS

MONTH

独立

MONTHS

QUARTER

独立

季度

QUARTERS

YEAR

独立

YEARS

SECOND_MICROSECOND

组合

秒到微秒

'SECONDS.MICROSECONDS'

MINUTE_MICROSECOND

组合

分钟到微秒

'MINUTES:SECONDS.MICROSECONDS'

MINUTE_SECOND

组合

分钟到秒

'MINUTES:SECONDS'

HOUR_MICROSECOND

组合

小时到微秒

'HOURS:MINUTES:SECONDS.MICROSECONDS'

HOUR_SECOND

组合

小时到秒

'HOURS:MINUTES:SECONDS'

HOUR_MINUTE

组合

小时到分钟

'HOURS:MINUTES'

DAY_SECOND

组合

天到秒

'DAYS HOURS:MINUTES:SECONDS'

DAY_MINUTE

组合

天到分钟

'DDAYSD HOURS:MINUTES'

DAY_HOUR

组合

天到小时

'DAYS HOURS'

YEAR_MONTH

组合

年到月

'YEARS-MONTHS'

例子

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)

说明

将日期时间以指定格式输出。

  • date 表示日期时间。

  • format 表示输出格式。

以下为所有输出格式列表:

格式符

含义

格式

%a

星期的英文缩写。

Sun..Sat

%b

月份的英文缩写。

Jan..Dec

%c

月份的数字形式。

1..12

%D

日的英文缩写。

1st..31st

%d

日的数字形式。

01..31

%e

日的数字形式。

1.. 31

%f

微秒。

000000..999999

%H

小时。

00..23

%h

小时。

01..12

%I

小时。

01..12

%i

分钟。

00..59

%j

一年中的第几天。

001..366

%k

小时。

0..23

%l

小时。

0..12

%M

月份的英文名称。

January..December

%m

月份的数字形式。

01..12

%p

上午或下午。

AM/PM

%r

12小时制时间。

hh:mm:ss AM/PM

%S

秒。

00..59

%s

秒。

00..59

%T

24小时制时间。

hh:mm:ss

%U

一年中的第几周,周日为每周第一天。

00..53

%u

一年中的第几周,周一为每周第一天。

00..53

%V

一年中的第几周,周日为每周第一天(和 %X 同时使用)。

01..53

%v

一年中的第几周,周一为每周第一天(和 %x 同时使用)。

01..53

%W

星期的英文名称。

Sunday..Saturday

%w

一周中的第几天。

0=Sunday..6=Saturday

%X

一周所属的年份,周日为每周第一天(和 %V 同时使用)。

%x

一周所属的年份,周一为每周第一天(和 %v 同时使用)。

%Y

四位年份。

%y

两位年份。

%%

文字字符,输出一个 %

例子

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_SUB(date, INTERVAL expr unit)

说明

日期时间的算术计算。

请参考 DATE_ADD()

DATEDIFF

声明

DATEDIFF(date1, date2)

说明

返回 date1date2 之间的天数。

计算中只用到参数的日期部分,忽略时间部分。

例子

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

声明

EXTRACT(unit FROM date)

说明

以整数类型返回 date 的指定部分值。如果指定多个部分,则将所有值按顺序拼接。

unit 请参考 DATE_ADD()。当 unitWEEK 时,请参考 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

声明

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

声明

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

声明

MONTH(date)

说明

返回 date 的月份信息。

例子

obclient> SELECT MONTH('2008-02-03');
+---------------------+
| MONTH('2008-02-03') |
+---------------------+
|                   2 |
+---------------------+
1 row in set (0.01 sec)

NOW

声明

NOW([scale])

说明

CURRENT_TIMESTAMP()

PERIOD_DIFF

声明

PERIOD_DIFF(p1, p2)

说明

以月份位单位返回两个日期之间的间隔。日期只能包含年月信息,格式只能为 YYYYMMYYMM

例子

obclient> SELECT PERIOD_DIFF(200802, 200703);
+----------------------------+
| PERIOD_DIFF(200802,200703) |
+----------------------------+
|                         11 |
+----------------------------+
1 row in set (0.01 sec)

STR_TO_DATE

声明

STR_TO_DATE(str, format)

说明

使用 formatstr 转换为 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

声明

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

声明

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

声明

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

声明

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

声明

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

声明

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_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()
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_TIMESTAMP()

说明

返回当前 UTC 时间。

例子

obclient> SELECT UTC_TIMESTAMP();
+---------------------+
| UTC_TIMESTAMP()     |
+---------------------+
| 2018-05-06 01:38:32 |
+---------------------+
1 row in set (0.01 sec)

YEAR

声明

YEAR(date)

说明

返回 date 值的年份信息。

例子

obclient> SELECT YEAR('1987-01-01');
+--------------------+
| YEAR('1987-01-01') |
+--------------------+
|               1987 |
+--------------------+
1 row in set (0.00 sec)