当前位置:K88软件开发文章中心编程全书编程全书01 → 文章内容

达梦数据库6.0之数据类型使用体验

减小字体 增大字体 作者:佚名  来源:翔宇亭IT乐园  发布时间:2019-1-3 2:25:04

ick:1082480.
SQL>SELECT * FROM T_INC;
SELECT * FROM T_INC;
ID              NAME
1       1       A
2       3       B
2 rows got
time used: 1.769(ms) clock tick:2943530.

接着看看达梦数据库的时间类型:

SQL>create table t_date
2   (day date, tim time, o_date datetime);
create table t_date
(day date, tim time, o_date datetime);
time used: 60.083(ms) clock tick:100448590.
SQL>insert into t_date
2   values ('2010-04-01', '16:22:57', to_date('2010-4-1 16:22:57', 'yyyy-mm-dd h
h24:mi:ss'));
insert into t_date
values ('2010-04-01', '16:22:57', to_date('2010-4-1 16:22:57', 'yyyy-mm-dd hh24:
mi:ss'))
1 rows affected
time used: 56.728(ms) clock tick:94839380.
SQL>select * from t_date;
select * from t_date;
day             tim             o_date
1       2010-04-01      16:22:57.000000 2010-04-01 16:22:57.000000
1 rows got
time used: 0.501(ms) clock tick:828690.

达梦数据库中的DATE和Oracle中的DATE有本质的区别,这一点似乎和SQLSERVER中的DATE类型比较相似。它把日期和时间分成了两个部分,对应两种不同的类型DATE和TIME,DATE的精度只到天,而TIME的精度到毫秒。达梦中也有即包括年月日也包括时分秒的数据类型DATETIME,也就是TIMESTAMP类型。不过这个类型和Oracle的DATE不同,它包含毫秒信息,相比较和Oracle的TIMESTAMP类型更相似一些,不过Oracle的TIMESTAMP不但支持到微秒,而且还可以包含时区的信息。还有一点也是达梦的时间类型所不支持的,公元前的日期:

SQL>insert into t_date
2   (day) values ('-235-4-1');
insert into t_date
(day) values ('-235-4-1')
非法的时间日期类型数据.error code = -2519
SQL>insert into t_date
2   (o_date) values (to_date('-235-4-1', 'syyyy-mm-dd'));
insert into t_date
(o_date) values (to_date('-235-4-1', 'syyyy-mm-dd'))
无效的时间格式掩码.error code = -2528

达梦支持多种INTERVAL类型的时间,虽然提供的类型比Oracle提供的要多很多,但是本质上并没有增加什么额外的新类型。有一点需要注意,两个Oracle日期类型相减后得到的是一个NUMBER类型的数值,表示的是两个日期相差的天数,而达梦中得到的是INTERVAL类型。下面简单介绍一下大字段类型,在达梦数据库中被称为多媒体类型:

SQL>create table t_text
2   (c1 text, c2 blob, c3 clob);
create table t_text
(c1 text, c2 blob, c3 clob);
time used: 139.863(ms) clock tick:233839160.

TEXT类型类似Oracle中的LONG,不过没有LONG那么多的限制。TEXT、BLOB和CLOB的最大长度都是2G-1,相当于Oracle LONG字段的长度,比8i中的BLOB和CLOB长度小了一半。在达梦数据库中没有BFILE对应的数据类型。达梦还提供了Oracle在SQL类型中没有支持的BOOLEAN类型:

SQL>create table t_bool
2   (col boolean);
create table t_bool
(col boolean);
time used: 66.991(ms) clock tick:111995500.
SQL>insert into t_bool values (true);
insert into t_bool values (true)
1 rows affected
time used: 0.538(ms) clock tick:889960.
SQL>insert into t_bool values (0);
insert into t_bool values (0)
1 rows affected
time used: 0.393(ms) clock tick:647120.
SQL>insert into t_bool values (null);
insert into t_bool values (null)
1 rows affected
time used: 0.337(ms) clock tick:555060.
SQL>select * from t_bool;
select * from t_bool;
col
1       1
2       0
3       NULL
3 rows got
time used: 37.112(ms) clock tick:62038100.
SQL>select * from t_bool where col & 0 = 0;
select * from t_bool where col & 0 = 0;
col
1       1
2       0
2 rows got
time used: 22.225(ms) clock tick:37149920.
SQL>select * from t_bool where col | 1 = 1;
select * from t_bool where col | 1 = 1;
col
1       1
2       0
2 rows got
time used: 14.423(ms) clock tick:24106790.

可以看到,达梦数据库对于NULL的布尔逻辑判断和Oracle中是不同的,在Oracle中,NULL & 0结果是FALSE,而NULL | 1结果是TRUE。在达梦中,NULL进行任何布尔运算的结果都仍然是NULL。此外达梦数据库对于位操作提供了很多方便的函数,比如按位与、按位或、异或等,在位操作方面确实比Oracle提供的函数要全面得多。


上一页  [1] [2] 


达梦数据库6.0之数据类型使用体验