OceanBase 日期時(shí)間函數(shù)

2021-06-30 14:00 更新

日期時(shí)間函數(shù)主要用來(lái)顯示有關(guān)日期和時(shí)間的信息。

CURDATE

聲明

CURDATE()

說(shuō)明

返回當(dāng)前日期,不含時(shí)間部分。

例子

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

CURRENT_DATE

聲明

CURRENT_DATE()
CURRENT_DATE

說(shuō)明

同 CURDATE()。

CURRENT_TIME

聲明

CURRENT_TIME([scale])

說(shuō)明

返回當(dāng)前時(shí)間,不含日期部分。

scale 有效值為 0 到 6,表示微秒部分精度,默認(rèn)值為 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])

說(shuō)明

返回當(dāng)前日期時(shí)間,考慮時(shí)區(qū)設(shè)置。

scale 有效值為 0 到 6,表示微秒部分精度,默認(rèn)值為 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()

說(shuō)明

同 CURRENT_TIME()。

DATE_ADD

聲明

DATE_ADD(date, INTERVAL expr unit)

說(shuō)明

日期時(shí)間的算術(shù)計(jì)算。

  • date 表示日期時(shí)間基準(zhǔn),日期部分必選,時(shí)間部分可選。

  • expr 表示時(shí)間間隔,可以為負(fù)值。

  • unit 表示時(shí)間間隔單位。

以下為所有時(shí)間間隔單位列表:

單位

類型

含義

格式

MICROSECOND

獨(dú)立

微秒

MICROSECONDS

SECOND

獨(dú)立

SECONDS

MINUTE

獨(dú)立

分鐘

MINUTES

HOUR

獨(dú)立

小時(shí)

HOURS

DAY

獨(dú)立

DAYS

WEEK

獨(dú)立

WEEKS

MONTH

獨(dú)立

MONTHS

QUARTER

獨(dú)立

季度

QUARTERS

YEAR

獨(dú)立

YEARS

SECOND_MICROSECOND

組合

秒到微秒

'SECONDS.MICROSECONDS'

MINUTE_MICROSECOND

組合

分鐘到微秒

'MINUTES:SECONDS.MICROSECONDS'

MINUTE_SECOND

組合

分鐘到秒

'MINUTES:SECONDS'

HOUR_MICROSECOND

組合

小時(shí)到微秒

'HOURS:MINUTES:SECONDS.MICROSECONDS'

HOUR_SECOND

組合

小時(shí)到秒

'HOURS:MINUTES:SECONDS'

HOUR_MINUTE

組合

小時(shí)到分鐘

'HOURS:MINUTES'

DAY_SECOND

組合

天到秒

'DAYS HOURS:MINUTES:SECONDS'

DAY_MINUTE

組合

天到分鐘

'DDAYSD HOURS:MINUTES'

DAY_HOUR

組合

天到小時(shí)

'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)

說(shuō)明

將日期時(shí)間以指定格式輸出。

  • date 表示日期時(shí)間。

  • format 表示輸出格式。

以下為所有輸出格式列表:

格式符

含義

格式

%a

星期的英文縮寫。

Sun..Sat

%b

月份的英文縮寫。

Jan..Dec

%c

月份的數(shù)字形式。

1..12

%D

日的英文縮寫。

1st..31st

%d

日的數(shù)字形式。

01..31

%e

日的數(shù)字形式。

1.. 31

%f

微秒。

000000..999999

%H

小時(shí)。

00..23

%h

小時(shí)。

01..12

%I

小時(shí)。

01..12

%i

分鐘。

00..59

%j

一年中的第幾天。

001..366

%k

小時(shí)。

0..23

%l

小時(shí)。

0..12

%M

月份的英文名稱。

January..December

%m

月份的數(shù)字形式。

01..12

%p

上午或下午。

AM/PM

%r

12小時(shí)制時(shí)間。

hh:mm:ss AM/PM

%S

秒。

00..59

%s

秒。

00..59

%T

24小時(shí)制時(shí)間。

hh:mm:ss

%U

一年中的第幾周,周日為每周第一天。

00..53

%u

一年中的第幾周,周一為每周第一天。

00..53

%V

一年中的第幾周,周日為每周第一天(和 %X 同時(shí)使用)。

01..53

%v

一年中的第幾周,周一為每周第一天(和 %x 同時(shí)使用)。

01..53

%W

星期的英文名稱。

Sunday..Saturday

%w

一周中的第幾天。

0=Sunday..6=Saturday

%X

一周所屬的年份,周日為每周第一天(和 %V 同時(shí)使用)。

%x

一周所屬的年份,周一為每周第一天(和 %v 同時(shí)使用)。

%Y

四位年份。

%y

兩位年份。

%%

文字字符,輸出一個(gè) %。

例子

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)

說(shuō)明

日期時(shí)間的算術(shù)計(jì)算。

請(qǐng)參考 DATE_ADD()

DATEDIFF

聲明

DATEDIFF(date1, date2)

說(shuō)明

返回 date1 和 date2 之間的天數(shù)。

計(jì)算中只用到參數(shù)的日期部分,忽略時(shí)間部分。

例子

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)

說(shuō)明

以整數(shù)類型返回 date 的指定部分值。如果指定多個(gè)部分,則將所有值按順序拼接。

unit 請(qǐng)參考 DATE_ADD()。當(dāng) unit 為 WEEK 時(shí),請(qǐng)參考 DATE_FORMAT() 的 %U 說(shuō)明。

例子

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)

說(shuō)明

返回指定天數(shù) N 對(duì)應(yīng)的 DATE 值。天數(shù)指距離 0000-01-01 的天數(shù)。

例子

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)

說(shuō)明

  • 不指定 format 參數(shù)時(shí),返回 DATETIME 類型值,不考慮時(shí)區(qū)。

  • 指定 format 參數(shù)時(shí),返回指定格式的日期時(shí)間字符串。

unix_timestamp 指 UNIX 時(shí)間戳,即距離 1970-01-01 00:00:00.000000 的微秒數(shù)。

format 支持的格式已在 DATE_FORMAT()說(shuō)明 中列出。

例子

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)

說(shuō)明

返回 date 的月份信息。

例子

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

NOW

聲明

NOW([scale])

說(shuō)明

同 CURRENT_TIMESTAMP()。

PERIOD_DIFF

聲明

PERIOD_DIFF(p1, p2)

說(shuō)明

以月份位單位返回兩個(gè)日期之間的間隔。日期只能包含年月信息,格式只能為 YYYYMM 或 YYMM。

例子

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)

說(shuō)明

使用 format 將 str 轉(zhuǎn)換為 DATETIME 值、DATE 值、或 TIME 值。返回值類型取決于 format 包含日期時(shí)間的哪些部分。

format 支持的格式已在 DATE_FORMAT()說(shuō)明 中列出。

例子

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)

說(shuō)明

以 TIME 類型返回 datetime 的時(shí)間信息。

例子

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)

說(shuō)明

將 date 值轉(zhuǎn)換為距離 1970-01-01 00:00:00.000000 的微秒數(shù),考慮時(shí)區(qū)信息。

date 可以表示日期,也可以表示日期時(shí)間。

例子

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)

說(shuō)明

以 TIME 類型返回兩個(gè)日期時(shí)間的時(shí)間間隔。

例子

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)

說(shuō)明

以 unit 為單位返回兩個(gè)日期時(shí)間的間隔。unit 只能為 DATE_ADD() 中的獨(dú)立單位。

例子

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)

說(shuō)明

日期時(shí)間的算術(shù)計(jì)算。

同 DATE_ADD(),但 unit 只能為獨(dú)立單位。

例子

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)

說(shuō)明

返回指定 date 值對(duì)應(yīng)的天數(shù)。天數(shù)指距離 0000-01-01 的天數(shù)。

例子

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)

說(shuō)明

將 usec 值轉(zhuǎn)換為 TIMESTAMP 類型值。

usec 表示距離 1970-01-01 00:00:00.000000 的微秒數(shù),考慮時(shí)區(qū)信息。

例子

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)

說(shuō)明

  • 不指定 date 參數(shù)時(shí),返回當(dāng)前時(shí)間距離 '1970-01-01 00:00:00' 的秒數(shù),考慮時(shí)區(qū)。

  • 指定 date 參數(shù)時(shí),返回指定時(shí)間距離 '1970-01-01 00:00:00' 的秒數(shù),考慮時(shí)區(qū)。

例子

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

說(shuō)明

返回當(dāng)前 UTC 時(shí)間。

例子

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

YEAR

聲明

YEAR(date)

說(shuō)明

返回 date 值的年份信息。

例子

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


以上內(nèi)容是否對(duì)您有幫助:
在線筆記
App下載
App下載

掃描二維碼

下載編程獅App

公眾號(hào)
微信公眾號(hào)

編程獅公眾號(hào)