VastbaseG100

基于openGauss内核开发的企业级关系型数据库。

Menu

DATETIME2类型

功能描述

Vastbase G100在SQL Server兼容模式下支持datetime2类型。datetime2类型结合了24小时制时间的日期,精确到小数点后6位,其格式为yyyy-MM-dd HH:mm:ss.ffffff

语法格式

datetime2[($n)]

参数说明

$n

用户指定的精度值,该参数可选。当未设置时,默认最大精度为6。

取值范围:0~6,其中0和6可取

  • 当精度大于6时,会提醒用户最大值为6,并强制将精度修改为6。
  • 当精度小于0时,会报错。

注意事项

  • 本特性仅在数据库兼容模式为SQL Server时能够使用(即创建DB时DBCOMPATIBILITY='MSSQL'),在其他数据库兼容模式下不能使用该特性。
  • 当插入字段值的精度超过预设的精度时,只保留值到预设精度;当插入值小于预设精度时,以插入值为准。

示例

前置条件:创建兼容SQL Server的库db_sqlserver,并进入。

create database db_sqlserver dbcompatibility  'MSSQL';
\c db_sqlserver

示例1:创建带datetime2的数据类型的测试表,并插入数据。

1、创建带datetime2字段的测试表。

create table test_1(id int,col1 datetime2);

2、向测试表中插入带公元、时区的记录。

insert into test_1 values(1,'294277-1-9 04:00:49.101010');
insert into test_1 values(2,'4713-12-31 23:59:59.999999 bc');
insert into test_1 values(3,'713-12-31 23:00:00.111 +08');
insert into test_1 values(4,'713-12-31 23:00:00.111 bc +08');
insert into test_1 values(5,'294277-1-9 04:00:49.101010 AD'),(7,null);
  • datetime2类型是在插入数据时,会忽略时区。
  • AD表示公元后,BC表示公元前。当日期不带BC时默认就是公元后,所以在查询记录时,公元后的日期可以不显示AD,公元前的日期必须带有BC。

3、查询插入记录在表中的情况。

select * from test_1 order by col1;

结果展示为:

 id |             col1
----+-------------------------------
  7 |
  2 | 4713-12-31 23:59:59.999999 BC
  4 | 0713-12-31 23:00:00.111 BC
  3 | 0713-12-31 23:00:00.111
  1 | 294277-01-09 04:00:49.10101
  5 | 294277-01-09 04:00:49.10101
(6 rows)

示例2:创建带指定精度范围的datetime2类型的表。

1、创建测试表。

create table test_2(col1 datetime2(3));

2、向测试表中插入数据。

insert into test_2 values('0713-12-31 23:00:00.1');
insert into test_2 values('0713-12-31 23:00:00.111');
insert into test_2 values('0713-12-31 23:00:00.111111');

3、查询测试表中的数据。

select * from test_2;

查询结果显示为不同精度的数据插入测试表后,小数点后都保持为三位:

          col1
-------------------------
 0713-12-31 23:00:00.1
 0713-12-31 23:00:00.111
 0713-12-31 23:00:00.111

示例3:对datetime2字段指定不同的精度创建表。

1、创建带不同精度的datetime2字段的测试表。

create table test1(col1 datetime2(0));
create table test2(col1 datetime2(6));
create table test(col1 datetime2(7));
create table test(col1 datetime2(-1));

返回结果分别为前两条测试语句成功执行;第三条语句创建表成功,但由于精度超过6提示deduced to 6,即表示创建成功,精度被修改为最高值6;第四条执行失败,因为精度值不能为负数:

CREATE TABLE

CREATE TABLE

WARNING:  TIMESTAMP(7) precision reduced to maximum allowed, 6
LINE 1: create table test(col1 datetime2(7));
                               ^
WARNING:  TIMESTAMP(7) precision reduced to maximum allowed, 6
CREATE TABLE

ERROR:  syntax error at or near "-"
LINE 1: create table test(col1 datetime2(-1));
                                         ^