DM 数据类型

官方文档:https://eco.dameng.com/document/dm/zh-cn/sql-dev/dmpl-sql-datatype.html

0、简介

DM 数据类型包括:精确数值数据类型、近似数值数据类型、字符数据类型、多媒体数据类型、一般日期时间数据类型、时间间隔数据类型。
此外,DM SQL 还扩展支持了 %TYPE、%ROWTYPE、记录类型、数组类型、集合类型和类类型,用户还可以定义自己的子类型。

1、数值数据类型

  • 精确数值数据类型包括:NUMERIC、DECIMAL、DEC、NUMBER、INTEGER、INT、BIGINT、TINYINT、BYTE、SMALLINT。
  • 近似数值类型包括:FLOAT、DOUBLE、REAL、DOUBLE PRECISION。
1
2
3
4
5
6
7
8
9
10
11
12
13
14
1.  NUMERIC[(精度 [, 标度])]:用于存储零、正负定点数。精度范围138。精度是一个无符号整数,定义了总的数字数,精度范围是 138。标度定义了小数点右边的数字位数。一个数的标度不应大于其精度,如果实际标度大于指定标度,那么超出标度的位数将会四舍五入省去。
例如:NUMERIC(4,1) 定义了小数点前面 3 位和小数点后面 1 位,共 4 位的数字,范围在 -999.9999.9。如果其值超过精度,会返回一个出错信息,如果超过标度,则多余的位会被截断。
2. NUMBER类型:跟NUMERIC相同
3. DECIMAL/DEC类型:跟NUMERIC相似
4. INTEGER/INT类型:用于存储有符号整数,精度为10
5. BIGINT类型:用于存储有符号整数,精度为19,标度为0
6. TINYINT类型:用于存储有符号整数,精度为3,标度为0。取值范围为:-128~+127
7. BYTE类型:与TINYINT相似,精度为3,标度为0
8. SMALLINT类型:用于存储有符号整数,精度为5,标度为0
9. BINARY类型:指定定长二进制数据。
10. REAL类型:带二进制的浮点数。
11. FLOAT类型:二进制精度的浮点数,精度最大不超过53
12. DOUBLE类型:同FLOAT相似,精度最大不超过53
13. DOUBLE PRECISION类型:该类型指明双精度浮点数,其二进制精度为53,十进制精度为15

NUMERIC 使用语法:

1
2
NUMERIC[(精度 [, 标度])],DECIMALDEC 类型、NUMBER 类型与 NUMERIC 的语法一致。
所有 NUMERIC 数据类型,如果其值超过精度,会返回一个出错信息,如果超过标度,则多余的位会被截断。

示例

1
2
3
4
5
6
7
8
9
10
-- 创建表,定义金额字段为 NUMERIC 类型,精度为 8, 标度为 2,即小数点前面 6 位,小数点后面 2 位  
CREATE TABLE numer_tab(
cust_id INT NOT NULL,
atm NUMERIC(8,2)
);

-- 插入数据
INSERT INTO numer_tab values('10000001','123456.12');
INSERT INTO numer_tab values('10000002','-123456.21');
INSERT INTO numer_tab values('10000003','1234567.21'); --会执行失败,小数点前超过6位。

2、字符数据类型

1
2
1.  CHAR/CHARACTER类型:定长字符串,最大长度由数据库页面大小决定。
2. VARCHAR类型:可变长字符串,最大长度由数据库页面大小决定。

示例

1
2
3
4
5
create table char_tab (  
b1 char(10),
b2 varchar(10),
primary key(b1)
)

3、位串数据类型

1
1.  BIT 类型:用于存储整数数据 1、0 或 NULL,只有 0 才转换为假,其他非空、非 0 值都会自动转换为真,可以用来支持 ODBC 和 JDBC 的布尔数据类型。DM 的 BIT 类型与 SQL Server 2000 的 BIT 数据类型相似。

示例

1
2
3
4
5
6
7
8
9
10
-- 创建表,定义性别字段为 sex, 1-男,0-女  
CREATE TABLE bit_tab(
cust_id INT NOT NULL,
cust_name VARCHAR(10),
sex bit
);

-- 插入数据
INSERT INTO bit_tab values('1','张三',1);
INSERT INTO bit_tab values('2','李利',0);

4、多媒体数据类型

1
2
3
4
5
1.  TEXT/LONGVARCHAR 类型:变长字符串类型,其字符串的长度最大为2G-1,可用于存储长的文本串。
2. IMAGE/LONGVARBINARY 类型:可用于存储多媒体信息中的图像类型。
3. BLOB 类型:用于指明变长的字符串,长度最大为2G-1字节。
4. CLOB 类型:用于指明变长的字符串,长度最大为2G-1字节。
5. BFILE 类型:用于指明存储在操作系统中的二进制文件。

示例

1
2
3
4
5
6
7
8
9
10
-- 创建表,定义多个多媒体数据类型字段  
CREATE TABLE TEXT_tab(
c1 TEXT,
c2 BLOB,
c3 CLOB,
c4 IMAGE
);

-- 插入数据
INSERT INTO TEXT_tab values('dameng','0x123456789','clob','0x987654321');

5、日期时间数据类型

1
2
3
4
5
6
7
8
9
10
1.  DATE类型:包括年、月、日信息,定义了‘-4712-01-01’和‘9999-12-31’之间任何一个有效的格里高利日期。
2. TIME类型:包括时、分、秒信息。
3. TIMESTAMP/DATATIME:包括年、月、日、时、分、秒信息。
4. TIME WITH TIME ZONE类型:描述一个带时区的TIME值。
5. TIMESTAMP WITH TIME ZONE类型
6. TIMESTAMP WITH LOCAL TIME ZONE类型:描述一个本地时区的TIMESTAMP值。
7. BOOL/BOOLEAN数据类型:布尔数据类型TRUEFALSE

TIME 类型的小数秒精度规定了秒字段中小数点后面的位数,取值范围为 06,如果未定义,缺省精度为 0
TIMESTAMP 类型的小数秒精度规定了秒字段中小数点后面的位数,取值范围为 06,如果未定义,缺省精度为 6

示例

1
2
3
4
5
6
7
8
9
10
11
-- 创建表,定义 3 个日期时间数据类型,DATE、TIME 及 TIMESTAMP  
CREATE TABLE DATE_TAB(
cust_id INT NOT NULL,
pay_date DATE,
pay_time TIME2),
pay_timestamp TIMESTAMP
);

-- 插入数据
INSERT INTO DATE_TAB values('111','2021-11-19','23:59:59.99','2021-11-19 23:59:59.999999');
INSERT INTO DATE_TAB values('112','2021-11-18','10:05:30.00','2021-11-18 10:05:30.000000');

DM 数据类型
https://flepeng.github.io/042-国产-DM-达梦数据库-21-命令-DM-数据类型/
作者
Lepeng
发布于
2024年3月6日
许可协议