全部产品
阿里云办公

日期时间函数

更新时间:2017-06-07 13:26:11

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

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 SECOND\G;
*************************** 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)