Oracle-达梦数据类型对比

Oracle-达梦数据类型对比

一、达梦时间类型

1.1DATE 类型

书写方式有两种:一是 DATE’年月日’;二是’年月日’。其中,年月日之间可以

使用分隔符或者没有分隔符。分隔符是指除大小写字母、数字以及双引号之外的所有单字节

字符且是可打印的。

例如:

CREATE TABLE T2(C1 DATE,C2 DATE,C3 DATE );

INSERT INTO T2 VALUES(DATE ‘1999-10-01’,‘1999/10/01’,‘1999.10.01’);

1.2TIME 类型

TIME 类型包括时、分、秒信息,定义了一个在’00:00:00.000000’和

'23:59:59.999999’之间的有效时间。TIME 类型的小数秒精度规定了秒字段中小数点后面的

位数,取值范围为 0~6,如果未定义,缺省精度为 0。

例如:

CREATE TABLE T2(C1 TIME(2),C2 TIME,C3 TIME);

INSERT INTO T2 VALUES(TIME ‘09:10:21.20’,‘09:10:21’,‘9:10:21.49’);

1.3TIMESTAMP 类型

TIMESTAMP 类型包括年、月、日、时、分、秒信息

例如:

CREATE TABLE T2(C1 TIMESTAMP,C2 DATETIME,C3 TIMESTAMP,C4 DATETIME,C5 TIMESTAMP);

INSERT INTO T2 VALUES(TIMESTAMP ‘2002-12-12 09:10:21’,TIMESTAMP ‘2002-12-12

09:10:21’,‘2002/12/12 09:10:21’,‘2002.12.12 09:10:21’,DATETIME’2002-12-12 09:10:21’ );

二、oracle时间类型

2.1Date类型

date存储年月日时分秒,固定存储7字节

表示年月日时分秒

⑴其展示格式既可以为:YYYY/MM/DD,也可以为YYYY/MM/DD HH24:MI:SS

⑵其存储格式只有一种:YYYY/MM/DD HH24:MI:SS

例如:

CREATE TABLE example_table (

id NUMBER,

name VARCHAR2(50),

date_of_birth DATE

);

INSERT INTO example_table (id, name, date_of_birth) VALUES (1, ‘John Doe’, TO_DATE(‘1990-05-15’, ‘YYYY-MM-DD’));

2.3timestamp类型

除了存储年月日时分秒,还有小数秒,小数秒默认6位,timestamp(6)表示秒的小数点后面可以存储6位

date和timestamp都是对日期和时间的表示,只是两种类型的精确度不同,前者精确到秒,后者精确到小数秒

例如:

CREATE TABLE another_table (

id NUMBER,

name VARCHAR2(50),

timestamp_column TIMESTAMP

);

INSERT INTO another_table (id, name, timestamp_column) VALUES (1, ‘John Doe’, SYSTIMESTAMP);

三、oracle数值类型

3.1number(p,s)类型

p精度,表示包括小数在内的总共有效位数,p的取值范围为[138](若没有指定,默认为38);s表示精确到多少位,取值范围为[-84127](若没有指定,默认为0),当s取负数时,将小数点左边的s位置为0,并四舍五入。

当小数位数大于s时,采用四舍五入的方式。当整数部分的长度大于p-s时,报错。

需要22个字节的存储空间。

例如:

CREATE TABLE number_table (

id NUMBER,

value NUMBER(8,2) – 8 total digits with 2 decimal places

);

INSERT INTO number_table (id, value) VALUES (1, 1234.56);

3.2number类型

integer或int是number的子类型,等同于number(38)

smallint是number的子类型,等同于number(38)

decimal是number(p,s)的子类型,可以使用decimal(p,s),若p,s未指定,等同于number(38)

例如:

CREATE TABLE new_number_table (

id NUMBER,

amount NUMBER

);

INSERT INTO new_number_table (id, amount) VALUES (1, 500);

3.3. float类型

float(b),数b表示二进制进度,b的取值范围为[1,126],默认为126

real是float(b)的子类型,等同于float(63)

上述的b是一个二进制精度(binary precision),而不是我们通常说的十进制精度(decimal precision),需要进行以下的转换:binary precision=int(b0.30103)

举例来说:当b=2,则对应的十进制精度为int(20.30103)=0,即小数点后精度为0。

eg:56.2存储到float(2)变为60。计算过程:56.2=5.6 * 10 ^ 1,因为精度为0只能取到整数,5.62四舍五入后为6,

最后取值为6 * 10 ^ 1=60

例如:

CREATE TABLE tb_float

(

“COL1” FLOAT,

“COL2” FLOAT(7));

INSERT INTO tb_float (“COL1”, “COL2”) VALUES (123.45, 67.89);

INSERT INTO tb_float (“COL1”, “COL2”) VALUES (987.65, 43.21);

3.4. binary_float和binary_double类型

binary_float 32位单精度浮点数数据类型,需要5个字节(4字节+1个长度字节)支持至少6位精度。

binary_double 64位双精度浮点数数据类型,需要9个字节(8字节+1个长度字节)。

例如:

CREATE TABLE table_binary_float ( id NUMBER, float_value BINARY_FLOAT );

INSERT INTO table_binary_float (id, float_value) VALUES (1, TO_BINARY_FLOAT(123.45)); INSERT INTO table_binary_float (id, float_value) VALUES (2, TO_BINARY_FLOAT(67.89));

例如:

CREATE TABLE table_binary_double ( id NUMBER, double_value BINARY_DOUBLE );

INSERT INTO table_binary_double (id, double_value) VALUES (1, TO_BINARY_DOUBLE(987.65)); INSERT INTO table_binary_double (id, double_value) VALUES (2, TO_BINARY_DOUBLE(43.21));

四、达梦数值类型

4.1NUMERIC 类型

语法:NUMERIC[(精度 [, 标度])]

功能:NUMERIC数据类型用于存储零、正负定点数。其中:精度是一个无符号整数,

定义了总的数字数,精度范围是1至38。标度定义了小数点右边的数字位数。一个数的标度

不应大于其精度,如果实际标度大于指定标度,那么超出标度的位数将会四舍五入省去。例

如:NUMERIC(4,1)定义了小数点前面3位和小数点后面1位,共4位的数字,范围在-999.9

到999.9。所有NUMERIC数据类型,如果其值超过精度,DM会返回一个出错信息,如果超

过标度,则多余的位会被截断。

如果不指定精度和标度,缺省精度为38,标度无限定。

例如:

– 创建表

CREATE TABLE numeric_table (

id INT,

value NUMERIC(8, 2)

);

– 插入数据

INSERT INTO numeric_table (id, value) VALUES (1, 1234.56);

4.2DECIMAL类型

语法:DECIMAL[(精度 [, 标度])]

功能:与 NUMERIC 相似。

例如:

– 创建 DECIMAL 类型表

CREATE TABLE decimal_table (

id INT,

value DECIMAL(10, 2)

);

– 插入数据

INSERT INTO decimal_table (id, value) VALUES (1, 1234.56);

INSERT INTO decimal_table (id, value) VALUES (2, 789.01);

4.3DEC 类型

语法:DEC[(精度[, 标度])]

功能:与 DECIMAL 相同。

– 创建 DEC 类型表

CREATE TABLE dec_table (

id INT,

value DEC(8, 3)

);

– 插入数据

INSERT INTO dec_table (id, value) VALUES (1, 456.789);

INSERT INTO dec_table (id, value) VALUES (2, 987.654);

4.4NUMBER 类型

语法:NUMBER[(精度[, 标度])]

功能:与 NUMERIC 相同。

例如:

– 创建 NUMBER 类型表

CREATE TABLE number_table (

id INT,

value NUMBER(5, 0)

);

– 插入数据

INSERT INTO number_table (id, value) VALUES (1, 12345);

INSERT INTO number_table (id, value) VALUES (2, 67890);

4.5INTEGER 类型

语法:INTEGER

功能:用于存储有符号整数,精度为 10,标度为 0。取值范围为:-2147483648 (-2 31 )~

+2147483647(2 31 -1)。

例如:

– 创建 INTEGER 类型表

CREATE TABLE integer_table (

id INT,

value INTEGER

);

– 插入数据

INSERT INTO integer_table (id, value) VALUES (1, 100);

INSERT INTO integer_table (id, value) VALUES (2, 200);

4.6INT 类型

语法:INT

功能:与 INTEGER 相同。

例如:

– 创建 INT 类型表

CREATE TABLE int_table (

id INT,

value INT

);

– 插入数据

INSERT INTO int_table (id, value) VALUES (1, 50);

INSERT INTO int_table (id, value) VALUES (2, 75);

4.7BIGINT 类型

语法:BIGINT

功 能 : 用 于 存 储 有 符 号 整 数 , 精 度 为 19 , 标 度 为 0 。 取 值 范 围 为 :

-9223372036854775808(-2 63 )~9223372036854775807(2 63 -1)。

例如:

– 创建 BIGINT 类型表

CREATE TABLE bigint_table (

id INT,

value BIGINT

);

– 插入数据

INSERT INTO bigint_table (id, value) VALUES (1, 123456789);

INSERT INTO bigint_table (id, value) VALUES (2, 987654321);

4.8TINYINT 类型

语法:TINYINT

功能:用于存储有符号整数,精度为 3,标度为 0。取值范围为:-128~+127。

例如:

– 创建 TINYINT 类型表

CREATE TABLE tinyint_table (

id INT,

value TINYINT

);

– 插入数据

INSERT INTO tinyint_table (id, value) VALUES (1, 10);

INSERT INTO tinyint_table (id, value) VALUES (2, 20);

4.9BYTE 类型

语法:BYTE

功能:与 TINYINT 相似,精度为 3,标度为 0。

SMALLINT 类型

功 能 : 用 于 存 储 有 符 号 整 数 , 精 度 为 5 , 标 度 为 0 。 取 值 范 围 为 :

-32768(-2 15 )~+32767(2 15 -1)。

例如:

– 创建 BYTE 类型表

CREATE TABLE byte_table (

id INT,

value BYTE

);

– 插入数据

INSERT INTO byte_table (id, value) VALUES (1, hextoraw(‘41’)); – ‘41’代表ASCII码值’A’

INSERT INTO byte_table (id, value) VALUES (2, hextoraw(‘42’)); – ‘42’代表ASCII码值’B’

4.10BINARY 类型

语法:BINARY[(长度)]

功能:BINARY 数据类型用来存储定长二进制数据。在基表中,定义 BINARY 类型的列

时,其最大存储长度由数据库页面大小决定,可以指定一个不超过其最大存储长度的正整数

作为列长度,缺省长度为 1 个字节。最大存储长度见表 1.4.1。BINARY 类型在表达式计算中

的长度上限为 32767。BINARY 常量以 0x 开始,后面跟着数据的十六进制表示,例如:

0x2A3B4058。

– 创建 BINARY 类型表

CREATE TABLE binary_table (

id INT,

value BINARY(10)

);

– 插入数据

INSERT INTO binary_table (id, value) VALUES (1, hextoraw(‘42696E61727944’)); – ‘BinaryDa’ 的十六进制表示,长度为8

INSERT INTO binary_table (id, value) VALUES (2, hextoraw(‘42696E61727932’)); – ‘BinaryD2’ 的十六进制表示,长度为8

4.11VARBINARY 类型

语法:VARBINARY[(长度)]

功能:VARBINARY 数据类型用来存储变长二进制数据,用法类似 BINARY 数据类型,

可以指定一个不超过 32767 的正整数作为数据长度。缺省长度为 8188 个字节。VARBINARY

数据类型的实际最大存储长度由数据库页面大小决定,具体最大长度算法与 VARCHAR 类

型的相同,其在表达式计算中的长度上限也与 VARCHAR 类型相同,为 32767。

– 创建 VARBINARY 类型表

CREATE TABLE varbinary_table (

id INT,

value VARBINARY(20)

);

– 插入数据

INSERT INTO varbinary_table (id, value) VALUES (1, hextoraw(‘56617242696E6172794461746131’)); – ‘VarBinaryData1’ 的十六进制表示

INSERT INTO varbinary_table (id, value) VALUES (2, hextoraw(‘56617242696E6172794461746132’)); – ‘VarBinaryData2’ 的十六进制表示

4.12FLOAT 类型

语法:FLOAT[(精度)]

功能:FLOAT 是带二进制精度的浮点数,精度范围(1~126)。当精度小于等于 24 时,

DM 将其转换为标准 C 语言中的 REAL 类型;当精度大于 24 时,转换为标准 C 语言中的DOUBLE 类型。

FLOAT 取值范围-1.710 308 ~1.710 308 。

例如:

4.13DOUBLE 类型

语法:DOUBLE[(精度)]

功能:DOUBLE 是带二进制精度的浮点数。DOUBLE 类型的设置是为了移植的兼容性。

该类型直接使用标准 C 语言中 DOUBLE。精度与取值范围与 FLOAT 一样。

例如:

CREATE TABLE double_table ( id INT, value DOUBLE );

– 插入数据

INSERT INTO double_table (id, value) VALUES (1, 12.34);

INSERT INTO double_table (id, value) VALUES (2, 56.78);

4.14REAL 类型

语法:REAL

功能:REAL 是带二进制精度的浮点数,但它不能由用户指定使用的精度,系统指定其

二进制精度为 24,十进制精度为 7。取值范围-3.410 38 ~3.410 38 。

例如:

CREATE TABLE real_table ( id INT, value REAL );

– 插入数据

INSERT INTO real_table (id, value) VALUES (1, 123.4567);

INSERT INTO real_table (id, value) VALUES (2, 789.0123);

4.15DOUBLE PRECISION 类型

语法:DOUBLE PRECISION[(精度)]

功能:该类型指明双精度浮点数。DOUBLE PRECISION 类型的设置是为了移植的兼容性。

该类型直接使用标准 C 语言中 DOUBLE。精度与取值范围与 FLOAT 一样。

例如:

CREATE TABLE double_precision_table (

id INT,

value DOUBLE PRECISION

);

– 插入数据

INSERT INTO double_precision_table (id, value) VALUES (1, 1234.5678);

INSERT INTO double_precision_table (id, value) VALUES (2, 5678.9012);

五、达梦字符数据类型

字符数据类型

5.1CHAR 类型

语法:CHAR[(长度)]

功能:CHAR 数据类型指定定长字符串。在基表中,定义 CHAR 类型的列时,可以指

定一个不超过 32767 的正整数作为字节长度,例如:CHAR(100)。如果未指定长度,缺省

为 1。CHAR 类型列的最大存储长度由数据库页面大小决定,CHAR 数据类型最大存储长度

和页面大小的对应关系请见下表 1.4.1。但是,在表达式计算中,该类型的长度上限不受页面大小限制,为 32767。

数据库页面大小 实际最大长度

4K 约 1900

8K 约 3900

16K 约 8000

32K 约 8188

这个限制长度只针对基表中的列,在定义变量的时候,可以不受这个限制长度的限制。

另外,实际插入表中的列长度要受到记录长度的约束,每条记录总长度不能大于页面大小的

一半。

例如:

CREATE TABLE char_table (

id INT,

value CHAR(10)

);

– 插入数据

INSERT INTO char_table (id, value) VALUES (1, ‘Apple’);

INSERT INTO char_table (id, value) VALUES (2, ‘Banana’);

5.2CHARACTER 类型

语法:CHARACTER[(长度)]

功能:与 CHAR 相同。(略)插入图片描述](https://img-blog.csdnimg.cn/direct/f0fceba72d47441f997cda7d0809beba.png)

5.3VARCHAR 类型/VARCHAR2 类型

语法:VARCHAR[(长度 [CHAR])]

功能:VARCHAR 数据类型指定变长字符串,用法类似 CHAR 数据类型,可以指定一

个不超过 32767 的正整数作为字节或字符长度,例如:VARCHAR (100)指定 100 字节长

度;VARCHAR(100 CHAR)指定 100 字符长度。如果未指定长度,缺省为 8188 字节。

在基表中,当没有指定 USING LONG ROW 存储选项时,插入 VARCHAR 数据类型的

实际最大存储长度由数据库页面大小决定,具体最大长度算法如表 1.4.1;如果指定了 USING LONG ROW 存储选项,则插入 VARCHAR 数据类型的长度不受数据库页面大小限制。

VARCHAR 类型在表达式计算中的长度上限不受页面大小限制,为 32767。

CHAR 同 VARCHAR 的区别在于前者长度不足时,系统自动填充空格,而后者只占用

实际的字节空间。另外,实际插入表中的列长度要受到记录长度的约束,每条记录总长度不

能大于页面大小的一半。

例如:

CREATE TABLE character_table (

id INT,

value CHARACTER(15)

);

– 插入数据

INSERT INTO character_table (id, value) VALUES (1, ‘Cherry’);

INSERT INTO character_table (id, value) VALUES (2, ‘Date’);

VARCHAR2 类型和 VARCHAR 类型用法相同。

例如:

CREATE TABLE varchar_table (

id INT,

value VARCHAR(20)

);

– 插入数据

INSERT INTO varchar_table (id, value) VALUES (1, ‘Elephant’);

INSERT INTO varchar_table (id, value) VALUES (2, ‘Frog’);

例如:

CREATE TABLE varchar2_table (

id INT,

value VARCHAR2(25)

);

– 插入数据

INSERT INTO varchar2_table (id, value) VALUES (1, ‘Giraffe’);

INSERT INTO varchar2_table (id, value) VALUES (2, ‘Horse’);

5.4ROWID 类型

语法:ROWID

功能:ROWID 类型数据由 18 位字符组成,用来表示 ROWID 数据。18 位字符由“4 位

站点号+6 位分区号+8 位物理行号”组成。ROWID 类型数据可通过 SF_BUILD_ROWID()

构造而来。

表中的 ROWID 类型列,可以用于排序或创建索引。但是 ROWID 类型不支持作为分区

列和自定义类型的属性数据类型。ROWID 列与字符类型一样,支持 MAX,MIN 等集函数,

不支持 SUM,AVG 等集函数。

例 创建一个含有 ROWID 类型的数据库表。

先构造 ROWID 数据。假定站点号为 1,分区号为 2,物理行号为 50。使用

SF_BUILD_ROWID 函数构造出一个 ROWID 类型数据。

SELECT SF_BUILD_ROWID(1,2,50);

查询结果如下:

AAABAAAAACAAAAAAAy

其中,AAAB 为站点号、AAAAAC 为分区号、AAAAAAAy 为 ROWID 值。

创建含有 ROWID 类型的表,并插入数据。

create table t(c1 int,c2 rowid);

insert into t values(8,‘AAABAAAAACAAAAAAAy’);

select c1,c2,rowid from t;

c2 列为插入的值,ROWID 为当前数据行的伪列 ROWID。查询结果如下:

行号 C1 C2 ROWID


1 8 AAABAAAAACAAAAAAAy AAAAAAAAAAAAAAAAAB

六、oracle字符数据类型

6.1char 定长字符类型

(未达到指定长度时,自动在末尾用空格补全);默认值为1;最大2000字节;非unicode。

例如:

CREATE TABLE char_table (

id INT,

value CHAR(10)

);

– 插入数据

INSERT INTO char_table (id, value) VALUES (1, ‘Apple’);

INSERT INTO char_table (id, value) VALUES (2, ‘Banana’);

6.2nchar 定长字符类型

(未达到指定长度时,自动在末尾用空格补全);默认值为1;最大2000字节;根据unicode,所有字符都占两个字节。

例如:

CREATE TABLE nchar_table (

id INT,

value NCHAR(10)

);

– 插入数据

INSERT INTO nchar_table (id, value) VALUES (1, ‘蘋果’);

INSERT INTO nchar_table (id, value) VALUES (2, ‘香蕉’);

6.3varchar2 变长字符类型

(未达到指定长度时,不自动补全空格);定义时需指定长度;最大为4000字节;非unicode。

例如:

CREATE TABLE varchar2_table (

id INT,

value VARCHAR2(20)

);

– 插入数据

INSERT INTO varchar2_table (id, value) VALUES (1, ‘Apple’);

INSERT INTO varchar2_table (id, value) VALUES (2, ‘Banana’);

6.4nvarchar2 变长字符类型

(未达到指定长度时,不自动补全空格);定义时需指定长度;最大为4000字节;根据unicode,所有字符都占两个字节。

例如:

CREATE TABLE nvarchar2_table (

id INT,

value NVARCHAR2(20)

);

– 插入数据

INSERT INTO nvarchar2_table (id, value) VALUES (1, ‘りんご’);

INSERT INTO nvarchar2_table (id, value) VALUES (2, ‘バナナ’);

有任何疑问请访问达梦官方网站:https://eco.dameng.com