技术开发 频道

专家点评:达梦6.0试用之数据类型

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

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.

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

  达梦还提供了Oracle在SQL类型中没有支持的BOOLEAN类型:

  可以看到,达梦数据库对于NULL的布尔逻辑判断和Oracle中是不同的,在Oracle中,NULL & 0结果是FALSE,而NULL | 1结果是TRUE。在达梦中,NULL进行任何布尔运算的结果都仍然是NULL。

  此外达梦数据库对于位操作提供了很多方便的函数,比如按位与、按位或、异或等,在位操作方面确实比Oracle提供的函数要全面得多。

0
相关文章