VastbaseG100

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

Menu

DATETIME类型

功能描述

Vastbase G100在SQL Server兼容模式下支持数据类型DATETIME。该数据类型为时间类型,是结合了24小时制时间的日期,秒的精度为小数点后3位,其格式为yyyy-MM-dd HH:mm:ss.fff

注意事项

  • 本特性仅在数据库兼容模式为SQL Server时能够使用(即创建DB时DBCOMPATIBILITY='MSSQL'),在其他数据库兼容模式下不能使用该特性。

  • SQL Server兼容模式下的DATETIME类型与其它兼容模式下的DATETIME类型并不完全相同,注意区分。

  • 在SQL Server兼容模式下,DATETIME数据类型的别名为mssql_datetime。

类型转换

  • 支持DATETIME类型到以下类型的显式转换:

    • 数字类型:tinyint、smallint、int、bigint、real、float、decimal、numeric、smallmoney、money、bit

    • 字符串类型:char()、varchar()、nchar()

    • 时间类型:datetime2、smalldatetime、date、timestamp

  • 支持DATETIME类型到以下类型的隐式转换:

    • 数字类型:tinyint、smallint、int、bigint、real、float、decimal、numeric、smallmoney、money、bit

    • 字符串类型:char()、varchar()、nchar()

    • 时间类型:datetime2、datetime、smalldatetime、date、time、timestamp

  • 支持以下类型到DATETIME类型的显式转换:

    • 字符串类型:char()、varchar()、nchar()

    • 时间类型:datetime2、smalldatetime、date、timestamp

  • 支持以下类型到DATETIME类型的隐式转换:

    • 数字类型:tinyint、smallint、int、bigint、real、float、decimal、numeric、smallmoney、money、bit

    • 字符串类型:char()、varchar()、nchar()

    • 时间类型:datetime2、datetime、smalldatetime、date、time、timestamp

DATETIME类型与数字类型之间的转换规则为:距离1900-01-01 00:00:00的天数。

示例

前置条件: 创建并切换至兼容模式为SQL Server的数据库下。

create database my_test with dbcompatibility='MSSQL';
\c my_test

示例1: 进行以下字符类型到datetime类型的显示转换。

select '1900-01-08 12:00:00.555'::char(30)::datetime;
select '1900-01-08 12:00:00.555'::varchar(30)::datetime;
select '1900-01-08 12:00:00.555'::nchar(30)::datetime;

返回结果为:

     mssql_datetime
-------------------------
 1900-01-08 12:00:00.555
(1 row)

     mssql_datetime
-------------------------
 1900-01-08 12:00:00.555
(1 row)

     mssql_datetime
-------------------------
 1900-01-08 12:00:00.555
(1 row)

示例2: 进行datetime类型到其他数据类型的隐式转换。

1、创建测试表。

create table t_datetime(id int,col datetime);

2、插入数据。

insert into t_datetime values(1,'1900-01-08 12:00:00.555'::char(30));
insert into t_datetime values(2,'1900-01-08 12:00:00.555'::varchar(30));
insert into t_datetime values(3,'1900-01-08 12:00:00.555'::nchar(30));

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

select * from t_datetime;

返回结果如下,表示隐式转换成功。

 id |           col
----+-------------------------
  1 | 1900-01-08 12:00:00.555
  2 | 1900-01-08 12:00:00.555
  3 | 1900-01-08 12:00:00.555
(3 rows)