閱讀502 返回首頁    go 阿裏雲 go 技術社區[雲棲]


日期時間函數__函數_SQL語法參考_雲數據庫 OceanBase-阿裏雲

日期時間函數主要用來顯示有關日期和時間的信息。

CURRENT_TIME()和CURRENT_TIMESTAMP()

注意:

  1. CURRENT_TIME()和 CURRENT_TIMESTAMP()和 OceanBase 0.5 已有實現不一致,請格外留意。
  2. current_time()和 current_timestamp()可以傳入 0-6 的數字參數,表示秒後的小數點精度。

CURRENT_TIME()和CURRENT_TIMESTAMP()這兩個函數用於獲取係統當前時間,但返回格式有區別。

CURRENT_TIME()是取當前時間,但不包括日期,返回格式為“HH:MI:SS”。

CURRENT_TIMESTAMP()則取當前日期+時間,返回格式為“YYYY-MM-DD HH:MI:SS”。

current_time()和current_timestamp()可以傳入0-6的數字參數,表示秒後的小數點精度。

Oceanbase>SELECT CURRENT_TIME(), CURRENT_TIMESTAMP();
+----------------+---------------------+
| CURRENT_TIME() | CURRENT_TIMESTAMP() |
+----------------+---------------------+
| 13:53:28       | 2016-03-14 13:53:28 |
+----------------+---------------------+
1 row in set (0.01 sec)

#可以支持傳入秒後的小數位精度參數
Oceanbase>select CURRENT_TIME(1);
+-----------------+
| CURRENT_TIME(1) |
+-----------------+
| 13:54:00.3      |
+-----------------+
1 row in set (0.01 sec) 

#傳入的精度範圍是0-6,否則報錯,錯誤碼1426 (42000)
Oceanbase>select CURRENT_TIME(7);
ERROR 1426 (42000): Too big precision 7 specified for column 'current_time'. Maximum is 6.

CURTIME()

CURTIME() 是CURRENT_TIME(),CURRENT_TIME的同義詞。

Oceanbase>select curtime(), current_time(), current_time;
+-----------+----------------+--------------+
| curtime() | current_time() | current_time |
+-----------+----------------+--------------+
| 14:45:37  | 14:45:37       | 14:45:37     |
+-----------+----------------+--------------+
1 row in set (0.00 sec)

CURRENT_DATE()

CURRENT_DATE() 返回當前日期,以‘YYYY-MM-DD’或者 YYYYMMDD的形式顯示。以何種形式顯示取決於函數中的內容是字符串還是數值。

例如:

Oceanbase>select current_date, current_date+5;
+--------------+----------------+
| current_date | current_date+5 |
+--------------+----------------+
| 2016-03-14   |       20160319 |
+--------------+----------------+
1 row in set (0.01 sec)

CURDATE()

CURDATE()是CURRENT_DATE(), CURRENT_DATE的同義詞。

Oceanbase>select curdate(), current_date(), current_date;
+------------+----------------+--------------+
| curdate()  | current_date() | current_date |
+------------+----------------+--------------+
| 2016-03-14 | 2016-03-14     | 2016-03-14   |
+------------+----------------+--------------+
1 row in set (0.01 sec)

DATE_ADD(date, INTERVAL expr unit)

這個函數用來執行時間的算術計算。將date值作為基數,對expr進行相加計算,expr的值允許為負數。DATE_ADD()計算時間值是否使用夏令時,由操作係統係統根據其內部配置和相應時區設定來決定。

  • date參數類型隻能為Time類型(DATETIME, TIMESTAMP等)或者代表時間的一個字符串,不接受其它類型。

  • date參數的期望日期類型為“YYYY-MM-DD HH:MM:SS.SSSSSS”格式。MySQL允許解析日期類型字符串時允許“不嚴格”語法,如果一個字符串中包含數字和非數字,MySQL將解析出被非數字隔斷的數字序列作為時間序列,依次賦給年月日。例如“Ywwe1990d07 09,12:45-08&900”該字符串和“1990-07-09 12:45:08.900”在表示時間值上是等價的。在OceanBase 1.0實現“嚴格語法”,對非法日期類型進行報錯處理,比如用戶插入“abc”這種非法日期時做報錯處理。

  • date字符串中,日期部分是必須的,而時間部分是可以缺省的。 例如“1990-07-09”是合法的,這種情況下後麵的時間部分將默認填充為0,其等價為“1990-07-09 00:00:00.000000”;而“1990-07”和“1990”這樣的格式都是非法的。

  • 目前date_add在解析date字符串的時候還不支持例如“990309”這種TIMESTAMP類型字符串。

  • OceanBase中的其它係統函數調用結果可以作為date參數進行計算。

  • OceanBase不支持對兩位數的年份進行模煳匹配,例如12年在MySQL中匹配為2012年,而在OceanBase中就代表12年。

  • expr的值允許為負,對一個負值相加功能等同於對一個正值相減。允許係統函數的調用結果作為該參數,但是所有結果都將作為字符串結果。

  • unit為單位,支持MICROSECOND、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。其中QUARTER代表季度。

  • unit為複合單位時,expr必須加單引號。

在MySQL命令行客戶端中,當單行顯示過長,造成閱讀困難時,可在SELECT結尾使用“G”,將查詢結果垂直排列。

Oceanbase>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): 2016-03-19 13:56:45
                       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 00:00:00
                             DATE_ADD('2014-01-10', INTERVAL 5 MONTH): 2014-06-10
                           DATE_ADD('2014-01-10', INTERVAL 5 QUARTER): 2015-04-10 00:00:00
                              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)

日期計算還支持 INTERVARL 後麵直接跟上加減(+/-)運算符形式。

date + INTERVAL expr unit
date - INTERVAL expr unit
Oceanbase>SELECT '2008-12-31 23:59:59' + INTERVAL 1 SECOND,'2005-01-01' - INTERVAL 1 SECONDG;
*************************** 1. row ***************************
'2008-12-31 23:59:59' + INTERVAL 1 SECOND: 2009-01-01 00:00:00
         '2005-01-01' - INTERVAL 1 SECOND: 2004-12-31 23:59:59
1 row in set (0.01 sec)

DATE_FORMAT(date, format)

DATE_FORMAT()是STR_TO_DATE()的逆函數,DATE_FORMAT()接受一個時間值date,將其按format的格式格式化成一個時間字符串。

  • date參數給出了被格式化的時間值,date隻接受time類型和時間字符串作為參數,其具體描述參考DATE_ADD()的date參數描述。

  • format的格式如下表所示。

格式 含義 返回格式
%a 星期。 Sun..Sat
%b 月份的縮寫名稱。 Jan,…,Dec
%c 月份,數字形式。 1,…,12
%D 帶有英語後綴的日期。 1st,2nd,…,31st
%d 日期,數字形式。 01,…,31
%e 日期,數字形式。 1,…,31
%f 微秒。 000000,…,999999
%H 小時。 00,…,23
%h 小時。 01,…,12
%I 小時。 01,…,12
%i 分鍾。 00,…,59
%j 一年中的第幾天。 000,…,366
%k 小時。 0,…,23
%l 小時。 01,…,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同時使用。
說明:在一年中的第一周或者最後一周產生跨年時
(以2014-01-01 星期三為例),
%U和%u時,該天為2014年的第00周,
%V和%v時為2013年的第52周。
01,…,53
%v 一年中的第幾周,其中周一為每周的第一天,
和%x同時使用。
01,…,53
%W 星期。 Sunday,…,Saturday
%w 一周中的第幾天。 0=Sunday,…,6=Saturday
%X 某一周所屬的年份,其中周日為每周的第一天,
數字形式,4位數,和%V同時使用。
-
%x 某一周所屬的年份,其中周一為每周的第一天,
數字形式,4位數,和%v同時使用。
-
%Y 年,用四位數字表示。 -
%y 年,用兩位數字表示。 -
%% 文字字符,輸出一個%。 -

注:“-”表示無。

Oceanbase>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

DATE_SUB(date, INTERVAL expr unit)

對時間進行算數計算。將date作為基數,對expr進行相減計算,expr允許為負,結果相當於做取反做加法。

參數說明參考DATE_ADD()。

Oceanbase>SELECT DATE_SUB('2014-01-10', INTERVAL 5 HOUR),
DATE_SUB('2014-01-10', INTERVAL '05:05:05.000005' HOUR_MICROSECOND)G;
*************************** 1. row ***************************
DATE_SUB('2014-01-10', INTERVAL 5 HOUR): 2014-01-09 19:00:00
DATE_SUB('2014-01-10', INTERVAL '05:05:05.000005' HOUR_MICROSECOND): 2014-01-09 18:54:54.999995
1 row in set (0.00 sec)

EXTRACT(unit FROM date)

提取date表達式中被unit指定的時間組成單元的值。

參數參考DATE_ADD()。

  • EXTRACT函數返回的結果為BIGINT類型。

  • 對於MICROSECOND~YEAR這種單一單元(Single unit),將直接返回對應的int值。

  • unit為WEEK返回的是date表達式中指定的日期在該年所對應的周數, 而 OceanBase將一年的第一個星期日作為該年第一周的開始,如果某年的第一個星期日不是1月1日,那麼該星期日之前的日期處於第0周。例如,2013年第一個星期日是1月6日,所以SELECT EXTRACT(WEEK FROM ‘2013-01-01’)返回的結果為0,而SELECT EXTRACT(WEEK FROM ‘2013-01-06’)返回的結果是1。

  • 對於SECOND_MICROSECOND這種複合單元(combinative unit),OceanBase將各個值拚接在一起作為返回值。例如,SELECT EXTRACT(YEAR_MONTH FROM '2012-03-09')返回的結果將是“201203”。

Oceanbase>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()): 18
1 row in set (0.00 sec)

NOW([fsp])

和CURRENT_TIMESTAMP()函數同義。用於獲取係統當前時間,精確到秒,格式為“YYYY-MM-DD HH:MI:SS”。

now()函數的括號裏可以傳入0-6數字參數,表示秒後麵的小數點精度,默認now()相當於now(0) 。

注意: now()函數的括號裏可以傳入 0-6 數字參數,表示秒後麵的小數點精度,默認now()相當於 now(0),OB 1.0 版本先實現 now()帶參數的功能。

為了兼容 MySQL,NOW()函數功能在OB 1.0裏將與OB 0.5 中不兼容,OB 0.5 版本中的 NOW()相當於OB 1.0裏的 NOW(6)

例子:

Oceanbase>SELECT NOW();
+---------------------+
| NOW()               |
+---------------------+
| 2016-03-14 14:00:02 |
+---------------------+
1 row in set (0.01 sec)

Oceanbase>select now(0);
+---------------------+
| now(0)              |
+---------------------+
| 2016-03-14 14:00:35 |
+---------------------+
1 row in set (0.01 sec)

Oceanbase>select now(1);
+-----------------------+
| now(1)                |
+-----------------------+
| 2016-03-14 14:00:37.8 |
+-----------------------+
1 row in set (0.01 sec)

Oceanbase>select now(2);
+------------------------+
| now(2)                 |
+------------------------+
| 2016-03-14 14:00:39.67 |
+------------------------+
1 row in set (0.00 sec)

Oceanbase>select now(3);
+-------------------------+
| now(3)                  |
+-------------------------+
| 2016-03-14 14:00:41.671 |
+-------------------------+
1 row in set (0.01 sec)

Oceanbase>select now(7);
ERROR 1426 (42000): Too big precision 7 specified for column 'now'. Maximum is 6.

STR_TO_DATE(str,format)

STR_TO_DATE函數獲取一個字符串str和一個格式字符串format。若格式字符串包含日期和時間部分,則 STR_TO_DATE()返回一個DATETIME值,若該字符串隻包含日期部分或時間部分,則返回一個DATE或TIME值。

  • str所包含的日期、時間或日期時間值應該在format指示的格式中被給定。若str包含一個非法日期、時間或日期時間值,則 STR_TO_DATE()返回NULL。同時,一個非法值會引起警告。

  • format的格式如下表所示。

格式 含義 返回格式
%b 月份的縮寫名稱。 Jan,…,Dec
%c 月份,數字形式。 1,…,12
%D 帶有英語後綴的日期。 1st,2nd,…,31st
%d 日期,數字形式。 01,…,31
%e 日期,數字形式。 1,…,31
%f 微秒。 000000,…,999999
%H 小時。 00,…,23
%h 小時。 01,…,12
%I 小時。 01,…,12
%i 分鍾。 00,…,59
%k 小時。 0,…,23
%l 小時。 01,…,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
%Y 年,用四位數字表示。 -

注:“-”表示無。

Oceanbase>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 17:05:05                                 |
+-----------------------------------------------------+
1 row in set (0.00 sec)

TIME_TO_USEC(date)

將OceanBase的內部時間類型轉換成一個微秒數計數。表示date所指的時刻距離“1970-01-01 00:00:00”的微秒數,這是一個UTC時間,不帶時區信息。

  • date為被計算的時刻,且這個時刻附帶時區信息,而時區信息是用戶當前係統設置的時區信息。該參數為TIMESTAMP類型或者時間格式的字符串。

  • TIME_TO_USEC能夠接受其它函數的調用結果作為參數,但是其的結果類型必須為TIMESTAMP或者時間格式的字符串。

  • 該函數返回值為微秒計數,返回類型為INT。

Oceanbase>SELECT TIME_TO_USEC('2014-03-25'), TIME_TO_USEC(now());
  +----------------------------+---------------------+
| TIME_TO_USEC('2014-03-25') | TIME_TO_USEC(now()) |
  +----------------------------+---------------------+
|           1395676800000000 |    1395735415207794 |
  +----------------------------+---------------------+
1 row in set (0.00 sec)

USEC_TO_TIME(usec)

該函數為TIME_TO_USEC(date)的逆函數,表示“1970-01-01 00:00:00”增加usec後的時間,且附帶了時區信息。例如在東八區調用該函數“USEC_TO_TIME(1)”,返回值為“1970-01-01 08:00:01”。

  • usec為一個微秒計數值。

  • 返回值為TIMESTAMP類型。

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

若無參數調用,則返回一個Unix timestamp ('1970-01-01 00:00:00' GMT 之後的秒數) 作為無符號整數。若用date來調用UNIX_TIMESTAMP(),它會將參數值以'1970-01-01 00:00:00' GMT後的秒數的形式返回。date可以是一個DATE 字符串、一個 DATETIME字符串、一個 TIMESTAMP或一個當地時間的YYMMDD 或YYYMMDD格式的數字。

Oceanbase>SELECT UNIX_TIMESTAMP();
+------------------+
| UNIX_TIMESTAMP() |
+------------------+
|       1427176668 |
+------------------+
1 row in set (0.00 sec)

Oceanbase>SELECT UNIX_TIMESTAMP('1997-10-04 22:23:00')
+---------------------------------------+
| UNIX_TIMESTAMP('1997-10-04 22:23:00') |
+---------------------------------------+
|                             875974980 |
+---------------------------------------+
1 row in set (0.00 sec)

DATEDIFF(expr1,expr2)

DATEDIFF()返回起始時間expr1和結束時間expr2之間的天數。expr1expr2為日期或日期時間表達式。計算中隻用到這些值的日期部分。

此函數必須跟兩個參數,多於或少於兩個參數,係統執行都將參數個數不正確錯誤。

Oceanbase>select datediff('2015-06-19','1994-12-17'), datediff('2015-06-19','1998-06-27 10:10:10'), datediff(now(), '2014-01-02')G;
*************************** 1. row ***************************
         datediff('2015-06-19','1994-12-17'): 7489
datediff('2015-06-19','1998-06-27 10:10:10'): 6201
                datediff(now(), '2014-01-02'): 533
1 row in set (0.00 sec)

TIMEDIFF(expr1,expr2)

TIMEDIFF()返回起始時間expr1和結束時間expr2之間的時間。expr1expr2為時間或日期時間表達式,兩個的類型必須一樣。

TIMEDIFF()返回結果限於時間值允許的範圍。另外,你也可以使用TIMESTAMPDIFF()和UNIX_TIMESTAMP()函數,這兩個函數的範圍值為整數類型。

    Oceanbase>select timediff(now(), '2015-06-06 11:11:22'), timediff('2015-06-06 12:12:12', '2014-06-05 11:11:11')G;
*************************** 1. row ***************************
                timediff(now(), '2015-06-06 11:11:22'): 838:59:59
timediff('2015-06-06 12:12:12', '2014-06-05 11:11:11'): 838:59:59
1 row in set (0.01 sec)

TIMESTAMPDIFF(unit,datetime_expr1,datetime_expr2)

返回日期或日期時間表達式datetime_expr1datetime_expr2之間的整數差。其結果的單位由unit參數給出。unit的值為:MICROSECOND(mircoseconds)、SECOND、MINUTE、HOUR、DAY、WEEK、MONTH、QUARTER,以及YEAR.

Oceanbase>select timestampdiff(second,now(), '2011-01-01 11:11:11'),  timestampdiff(second, '2011-01-01 11:11:11', now())G;
*************************** 1. row ***************************
 timestampdiff(second,now(), '2011-01-01 11:11:11'): -140843995
timestampdiff(second, '2011-01-01 11:11:11', now()): 140843995
1 row in set (0.00 sec)

PERIOD_DIFF(p1,p2)

返回周期p1p2之間的月數。p1p2的格式應該為 YYMM或YYYYMM。注意周期參數p1p2不是日期值。

Oceanbase>select period_diff(20150702, 20790503), period_diff(150702, 790503);
+---------------------------------+-----------------------------+
| period_diff(20150702, 20790503) | period_diff(150702, 790503) |
+---------------------------------+-----------------------------+
|                          -76777 |                      -76777 |
+---------------------------------+-----------------------------+
1 row in set (0.00 sec)

TO_DAYS(date)

給定一個日期 date,返回一個天數(從年份為 0 開始的天數)。

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

TO_DAYS()不用於陽曆出現(1582)前的值,原因是當日曆改變時,遺失的日期不會被考慮在內。

日期中的二位數年份值轉化為四位。例如,‘2015-11-04’和‘15-11-04’被視為同樣的日期。

對於0日期‘0000-00-00’在日期中被認為是不合法的。

FROM_DAYS(N)

給定一個天數N,返回一個DATE值。

Oceanbase>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_DAYS()處理古老日期時,務必謹慎,它不用於處理陽曆日曆出現(1582)前的日期。

FROM_UNIXTIME(unix_timestamp[,format])

FROM_UNIXTIME(unix_timestamp) , FROM_UNIXTIME(unix_timestamp,format) 

返回'YYYY-MM-DD HH:MM:SS'或 YYYYMMDDHHMMSS 格式值的 unix_timestamp 參數表示,具體格式取決於該函數是否用在字符串中或是數字語境中。

若 format 已經給出,則結果的格式是根據 format 字符串而定。 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 時間 , 12 小時製 (小時 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 該周的年份,其中周日為每周的第一天, 數字形式,4 位數;和%V 同時使用
%x 該周的年份,其中周一為每周的第一天, 數字形式,4 位數;和%v 同時使用
%Y 年份, 數字形式,4 位數
%y 年份, 數字形式 (2 位數)
%% ‘%’文字字符
Oceanbase>SELECT FROM_UNIXTIME(UNIX_TIMESTAMP(), '%Y %D %M %h:%i:%s %x');
+---------------------------------------------------------+
| FROM_UNIXTIME(UNIX_TIMESTAMP(), '%Y %D %M %h:%i:%s %x') |
+---------------------------------------------------------+
| 2016 8th March 08:11:26 2016                            |
+---------------------------------------------------------+
1 row in set (0.01 sec)

最後更新:2016-11-23 16:03:54

  上一篇:go 優先級__運算符_SQL語法參考_雲數據庫 OceanBase-阿裏雲
  下一篇:go 字符串函數__函數_SQL語法參考_雲數據庫 OceanBase-阿裏雲