Oracle-达梦数据类型对比

时间:2024-07-05 20:09:50

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.****img.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