开发者社区> 问答> 正文

OceanBase支持的日期时间函数


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

CURRENT_TIME()和CURRENT_TIMESTAMP()


[backcolor=transparent]注意:
  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的格式如下表所示。
[backcolor=transparent]格式[backcolor=transparent]含义[backcolor=transparent]返回格式
%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
%r12小时制时间。hh:mm:ss AM/PM
%S秒。00,…,59
%s秒。00,…,59
%T24小时制时间。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) 。

[backcolor=transparent]注意: 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的格式如下表所示。
[backcolor=transparent]格式[backcolor=transparent]含义[backcolor=transparent]返回格式
%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
%r12小时制时间。hh:mm:ss AM/PM
%S秒。00,…,59
%s秒。00,…,59
%T24小时制时间。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)

展开
收起
云栖大讲堂 2017-11-01 15:16:02 8903 1
0 条回答
写回答
取消 提交回答
问答排行榜
最热
最新

相关电子书

更多
开源HTAP OceanBase产品揭秘 立即下载
云数据库OceanBase 架构演进及在金融核心系统中的实践 立即下载
自研金融数据库OceanBase的创新之路 立即下载