GBase 8s数据类型之日期和时间类型

GBase 8s 分布式支持的日期和时间类型,如下表所示:

类型名称

最小值

最大值

格式

DATE

0001-01-01

9999-12-31

YYYY-MM-dd

DATETIME

0001-01-01 00:00:00.000000

9999-12-3123:59:59.999999

YYYY-MM-dd HH:MI:SS.ffffff

TIME

00:00:00

23:59:59

HHH:MI:SS

TIMESTAMP

1970-01-01 08:00:01

2038-01-19 11:14:07

YYYY-MM-DD HH:MI:SS

当使用日期和时间类型时,用户应当提供正确的格式:如,YYYY-MM-DD、YYYY-MM-DD HH:MI:SS。

1、DATE

日期类型。支持的范围是“0001-01-01”到“9999-12-31”。

GBase 8s 分布式以“YYYY-MM-DD”格式显示DATE值。

示例1:插入一个标准的DATE值。

gbase> CREATE TABLE products (productDate DATE);

Query OK, 0 rows affected

gbase> INSERT INTO products(productDate) VALUES('2010-09-01');

Query OK, 1 row affected

gbase> SELECT productDate FROM products;

+-------------+

| productDate |

+-------------+

| 2010-09-01  |

+-------------+

1 row in set

示例2:插入一个NULL值。

gbase> CREATE TABLE products (productDate DATE);

Query OK, 0 rows affected

gbase> INSERT INTO products(productDate) VALUES(NULL);

Query OK, 1 row affected

gbase> SELECT productDate FROM products;

+-------------+

| productDate |

+-------------+

| NULL        |

+-------------+

1 rows in set

示例3:插入一个非法的DATE值,系统报告错误信息。

gbase> CREATE TABLE products (productDate DATE);

Query OK, 0 rows affected

gbase> INSERT INTO products(productDate) VALUES('2010-09-31');

ERROR 1292 (22007): Incorrect date value: '2010-09-31' for column 'productDate' at row 1

2、TIME

GBase 8s 分布式以“HH:MI:SS”格式(或“HHH:MI:SS”格式)检索和显示TIME值,该值为字符串。

TIME的范围是“00:00:00”到“23:59:59”。TIME类型可以用于表示一天的时间。

对于以字符串指定的包含时间定界符的TIME值,小于10的时、分或秒,可以不指定为两位数值。“8:3:2”与“08:03:02”是一致的。

示例1:插入一个合法的TIME值。

gbase> CREATE TABLE products (productDate TIME);

Query OK, 0 rows affected

gbase> INSERT INTO products(productDate) VALUES('12:09:44');

Query OK, 1 row affected

gbase> SELECT productDate FROM products;

+-------------+

| productDate |

+-------------+

| 12:09:44    |

+-------------+

1 row in set

3、DATETIME

GBase 8s 分布式以“YYYY-MM-DD HH:MI:SS.fffff”格式显示DATETIME值。其中fffff表示 1/100000 秒格式。

日期和时间的组合类型。支持的范围是“0001-01-01 00:00:00.00000”到“9999-12-31 23:59:59.99999”。

示例1:插入一个合法的DATETIME值。

gbase> CREATE TABLE products (productDate DATETIME);

Query OK, 0 rows affected

gbase> INSERT INTO products(productDate) VALUES('2010-09-01 12:09:44');

Query OK, 1 row affected

gbase> SELECT productDate FROM products;

+---------------------+

| productDate         |

+---------------------+

| 2010-09-01 12:09:44 |

+---------------------+

1 row in set

示例2:插入系统当前的DATATIME值。

gbase> INSERT INTO products(productDate) VALUES(NOW());

Query OK, 1 row affected

gbase> SELECT productDate FROM products;

+---------------------+

| productDate         |

+---------------------+

| 2013-10-16 17:51:38 |

+---------------------+

1 row in set

示例3:插入一个NULL值。

gbase> INSERT INTO products(productDate) VALUES(NULL);

Query OK, 1 row affected

gbase> SELECT productDate FROM products;

+-------------+

| productDate |

+-------------+

| NULL        |

+-------------+

1 row in set

示例4:插入一个带有微秒的DATETIME数值。

gbase> INSERT INTO products(productDate) VALUES('2013-09-15 12:09:44.123456');

Query OK, 1 row affected

gbase> SELECT productDate FROM products;

+----------------------------+

| productDate                |

+----------------------------+

| 2013-09-15 12:09:44.123450 |

+----------------------------+

1 row in set

示例5:插入一个非法的DATETIME值,系统将报告错误信息。

gbase> INSERT INTO products(productDate) VALUES('2010-09-31 12:09:44');

ERROR 1292 (22007): Incorrect datetime value: '2010-09-31 12:09:44' for column 'productDate' at row 1

4、TIMESTAMP

TIMESTAMP类型仅仅是为了兼容SQL标准,因此,不建议使用者在实际的项目应用场景使用此数据类型,推荐使用DATETIME数据类型。

TIMESTAMP的格式为“YYYY-MM-DD HH:MI:SS”,支持的范围是“1970-01-01 08:00:01”到“2038-01-19 11:14:07”。

例如:

gbase> CREATE TABLE t (a int,b timestamp DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP, c timestamp DEFAULT '2013-01-01 00:00:01');

Query OK, 0 rows affected

gbase> SHOW CREATE TABLE t;

+-------+----------------------------------------------------------------+

| Table | Create Table                                                   |

+-------+----------------------------------------------------------------+

| t     | CREATE TABLE "t" (

  "a" int(11) DEFAULT NULL,

  "b" timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP,

  "c" timestamp NOT NULL DEFAULT '2013-01-01 00:00:01'

) ENGINE=EXPRESS DEFAULT CHARSET=utf8 TABLESPACE='sys_tablespace'        |

+-------+----------------------------------------------------------------+

1 row in set

TIMESTAMP使用限制:

以下限制说明,是针对TIMESTAMP数据列自动更新时的场景:

使用DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP属性后,TIMESTAMP列在支持INSERT、UPDATE以及MERGE时,它的值自动更新。需要注意的是DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP在一张表中只能给第一个TIMESTAMP列使用一次,也就是含有多个TIMESTAMP列时,只能给第一次出现TIMESTAMP列使用DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP属性。

创建一张表时,如果只定义一个TIMESTAMP列,则DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP可以省略,系统会自动添加上。

从不同节点发起的SQL语句,TIMESTAMP列更新的时间为发起节点的本地时间;如果从不同的发起点发起SQL,而各个节点的本地时间又不同步,则无法保证TIMESTAMP列更新值一致。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值