赞
踩
本章节主要介绍 DM 数据库支持的常规数据类型。DM SQL 程序支持所有的 DM SQL 数据类型,包括:精确数值数据类型、近似数值数据类型、字符数据类型、多媒体数据类型、一般日期时间数据类型、时间间隔数据类型。此外,DM SQL 还扩展支持了 %TYPE、%ROWTYPE、记录类型、数组类型、集合类型和类类型,用户还可以定义自己的子类型。
本实验要求了解各数据类型的数值范围和应用场景。
语法: NUMERIC/NUMBER/DECIMAL/DEC[( 精度 [, 标度])]
说明:
NUMERIC/NUMBER/DECIMAL/DEC数据类型用于存储零、正负定点数。其中:精度是一个无符号整数,定义了总的数字数,精度范围是 1~38,标度定义了小数点右边的数字位数,定义时如省略精度,则缺省是 16。如省略标度,则缺省为 0。一个数的标度不应大于其精度。
如果不指定精度和标度,缺省精度为 38。
以NUMERIC为例:NUMERIC(4,1)定义了小数点前面 3 位和小数点后面 1 位,共 4 位的数字,范围在-999.9 到 999.9。所有 NUMERIC 数据类型,如果其值超过精度,达梦数据库返回一个出错信息,如果超过标度,则多余的位截断。
举例:
CREATE TABLE S1.T1 (num NUMERIC(4,1));
INSERT INTO S1.T1 VALUES(1.2345678);COMMIT;
INSERT INTO S1.T1 VALUES(1.5);COMMIT;
INSERT INTO S1.T1 VALUES(1.59);COMMIT;
INSERT INTO S1.T1 VALUES(1);COMMIT;
INSERT INTO S1.T1 VALUES(999.9);COMMIT;
INSERT INTO S1.T1 VALUES(-999.9);COMMIT;
INSERT INTO S1.T1 VALUES(0);COMMIT;
SELECT * FROM S1.T1;
语法:
BIT
说明:
BIT 类型用于存储整数数据 1、0 或 NULL,可以用来支持 ODBC 和 JDBC 的布尔数据类型。DM 的 BIT 类型与 SQL SERVER2000 的 BIT 数据类型相似。功能与 ODBC 和 JDBC 的 BOOL 相同。
举例:
CREATE TABLE S1.T2 (num BIT);
INSERT INTO S1.T2 VALUES(1);COMMIT;
INSERT INTO S1.T2 VALUES(0);COMMIT;
INSERT INTO S1.T2 VALUES(NULL);COMMIT;
SELECT * FROM S1.T2;
语法:
INTEGER
INT
说明:
用于存储有符号整数,精度为 10,标度为 0。取值范围为:-2147483648(-231)~+2147483647(231-1)。
举例:
CREATE TABLE S1.T3 (num INT);
INSERT INTO S1.T3 VALUES(123456);COMMIT;
INSERT INTO S1.T3 VALUES(-123456);COMMIT;
INSERT INTO S1.T3 VALUES(0);COMMIT;
INSERT INTO S1.T3 VALUES(-0);COMMIT;
INSERT INTO S1.T3 VALUES(1.11111);COMMIT;
INSERT INTO S1.T3 VALUES(1.9);COMMIT;
SELECT * FROM S1.T3;
语法:
TINYINT
说明:
用于存储有符号整数,精度为 3,标度为 0。取值范围为:-128(-27)~+127(-27-1)。
举例: 略
语法:
SMALLINT
说明:
用于存储有符号整数,精度为 5,标度为 0。取值范围为:-32768(-2^15)~ +32767(2^15-1)。
举例:
语法:
BIGINT
说明:
用于存储有符号整数,精度为 19,标度为 0。取值范围为:-9223372036854775808(-263)~+9223372036854775807(263-1)。
举例: 略
语法:
BINARY[(长度 )]
说明:
BINARY 数据类型指定定长二进制数据。缺省长度为 1 个字节,最大长度由数据库页面大小决定,具体可参考《DM8_SQL 语言使用手册》1.4.1 节。BINARY 常量以 0x 开始,后跟数据的十六进制表示,例如 0x2A3B4058。
举例:
由于1字节=2^8=256,用十六进制表示为2位,所以BINARY显示为0x+2位16进制数,范围为00-FF(0-255);如果超过255,将继续从0开始循环。
CREATE TABLE S1.T4 (num BINARY(1));
INSERT INTO S1.T4 VALUES(1);COMMIT;
INSERT INTO S1.T4 VALUES(255);COMMIT;
INSERT INTO S1.T4 VALUES(256);COMMIT;
INSERT INTO S1.T4 VALUES(257);COMMIT;
SELECT * FROM S1.T4;
语法:
VARBINARY[(长度 )]
说明:
VARBINARY 数据类型指定变长二进制数据,用法类似 BINARY 数据类型,可以指定一个正整数作为数据长度。缺省长度为 8188 个字节,最大长度由数据库页面大小决定,具体可参考《DM8_SQL 语言使用手册》1.4.1 节。
举例: 参考VARBINARY
语法:
REAL
说明:
REAL 是带二进制的浮点数,但它不能由用户指定使用的精度,系统指定其二进制精度为 24,十进制精度为 7。取值范围-3.4E+38~3.4E + 38。
举例:
CREATE TABLE S1.T6 (num REAL);
INSERT INTO S1.T6 VALUES(1);COMMIT;
INSERT INTO S1.T6 VALUES(0);COMMIT;
INSERT INTO S1.T6 VALUES(0.555555555555555555555555);COMMIT;
INSERT INTO S1.T6 VALUES(1.555555555555555555555555);COMMIT;
INSERT INTO S1.T6 VALUES(1e3);COMMIT;
INSERT INTO S1.T6 VALUES(3.4E38);COMMIT;
INSERT INTO S1.T6 VALUES(34000000000000);COMMIT;
INSERT INTO S1.T6 VALUES(340000000000000000000000000000000000001);COMMIT;
SELECT * FROM S1.T6;
语法:
FLOAT[(精度)]
说明:
FLOAT 是带二进制精度的浮点数,精度最大不超过 53,如省略精度,则二进制精度为 53,十进制精度为 15。取值范围为-1.7E+308~1.7E+308。
注意:当精度小于24时,DM将其转为REAL类型;精度大于24时,精度转为DOUBLE类型
举例: 参考REAL
CREATE TABLE S1.T7 (num FLOAT(3));
INSERT INTO S1.T7 VALUES(1);COMMIT;
INSERT INTO S1.T7 VALUES(0.555555555555555555);COMMIT;
INSERT INTO S1.T7 VALUES(6666.555555555555555555);COMMIT;
INSERT INTO S1.T7 VALUES(6666666666666.555555555555555555);COMMIT;
SELECT * FROM S1.T7;
语法:
DOUBLE[(精度)]
说明:
同 FLOAT 相似,精度最大不超过 53。
举例: 略
语法:
DOUBLE PRECISION
说明:
该类型指明双精度浮点数,其二进制精度为 53,十进制精度为 15。取值范围-1.7E+308 ~1.7E+308。
举例: 略
语法:
CHAR[(长度)]
CHARACTER[(长度)]
说明:
定长字符串,最大长度由数据库页面大小决定,具体可参考《DM8_SQL 语言使用手册》1.4.1 节。长度不足时,自动填充空格。
举例:
CREATE TABLE S1.T12 (num CHAR(10));
INSERT INTO S1.T12 VALUES('');COMMIT;
INSERT INTO S1.T12 VALUES('aaa');COMMIT;
INSERT INTO S1.T12 VALUES('aaaaabbbbb');COMMIT;
SELECT * FROM S1.T12;
语法:
VARCHAR[(长度)]
说明:
可变长字符串,最大长度由数据库页面大小决定,具体可参考《DM8_SQL 语言使用手册》1.4.1 节。该数据类型存储的数据量受到LENGTH_IN_CHAR和CHARSET参数的影响。
根据数据库初始化时的参数不同,VARCHAR中能存储的汉字个数不同。主要由如下 2 个参数决定:
语法:
TEXT
LONGVARCHAR
说明:
变长字符串类型,其字符串的长度最大为 100G-1,可用于存储长的文本串。
举例:
TEXT类型查询出来默认为<长文本>,无法直接查看数据,可通过convert(varchar, 列名 )来转换,但注意varchar类型有长度限制。
CREATE TABLE S1.T14 (t TEXT);
INSERT INTO S1.T14 VALUES('');COMMIT;
INSERT INTO S1.T14 VALUES('爱我中华');COMMIT;
INSERT INTO S1.T14 VALUES('爱我中华啦啦啦啦啦啦啦啦啦啦啦啦啦啦啦啦啦啦啦爱我中华啦啦啦啦啦啦啦啦啦啦啦啦啦啦啦啦啦啦啦爱我中华啦啦啦啦啦啦啦啦啦啦啦啦啦啦啦啦啦啦啦爱我中华啦啦啦啦啦啦啦啦啦啦啦啦啦啦啦啦啦啦啦爱我中华啦啦啦啦啦啦啦啦啦啦啦啦啦啦啦啦啦啦啦爱我中华啦啦啦啦啦啦啦啦啦啦啦啦啦啦啦啦啦啦啦爱我中华啦啦啦啦啦啦啦啦啦啦啦啦啦啦啦啦啦啦啦爱我中华啦啦啦啦啦啦啦啦啦啦啦啦啦啦啦啦啦啦啦');COMMIT;
SELECT * FROM S1.T14;
select convert(varchar, t ) AS text_col FROM S1.T14;
语法:
IMAGE
LONGVARBINARY
说明:
可用于存储多媒体信息中的图像类型。图像由不定长的象素点阵组成,长度最大为 100G-1 字节。该类型除了存储图像数据之外,还可用于存储任何其它二进制数据。
举例: 略
语法:
BLOB
说明:
BLOB 类型用于指明变长的二进制大对象,长度最大为 100G-1 字节。
举例: 略
语法:
CLOB
说明:
CLOB 类型用于指明变长的字符串,长度最大为 100G-1 字节。
举例: 略
语法:
BFILE
说明:
BFILE 用于指明存储在操作系统中的二进制文件,文件存储在操作系统而非数据库中,仅能进行只读访问。
举例: 略
DMSQL 程序支持的日期时间数据类型分为一般日期时间数据类型、时区数据类型和时间间隔数据类型三类。
语法:
DATE
说明:
DATE 类型包括年、月、日信息,定义了’-4712-01-01’和’9999-12-31’之间任何一个有效的格里高利日期。
举例:
CREATE TABLE S2.T1 (t DATE);
INSERT INTO S2.T1 VALUES('2024-01-15');COMMIT;
INSERT INTO S2.T1 VALUES('2024-1-1');COMMIT;
INSERT INTO S2.T1 VALUES('1-1-1');COMMIT;
INSERT INTO S2.T1 VALUES('9999-12-31');COMMIT;
SELECT * FROM S2.T1;
语法:
TIME[(小数秒精度)]
说明:
TIME 类型包括时、分、秒信息,定义了一个在’00:00:00.000000’和’23:59:59.999999’之间的有效时间。TIME 类型的小数秒精度规定了秒字段中小数点后面的位数,取值范围为 0~6,如果未定义,缺省精度为 0。
举例:
CREATE TABLE S2.T2 (t time(1));
INSERT INTO S2.T2 VALUES('12:00:22.111');COMMIT;
INSERT INTO S2.T2 VALUES('12:00:11');COMMIT;
SELECT * FROM S2.T2;
语法:
TIMESTAMP[(小数秒精度)]
DATETIME[(小数秒精度)]
说明:
TIMESTAMP/DATETIME 类型包括年、月、日、时、分、秒信息,定义了一个在’-4712-01-0100:00:00.000000’和’9999-12-31 23:59:59.999999’之间的有效格里高利日期时间。小数秒精度规定了秒字段中小数点后面的位数,取值范围为 0~6,如果未定义,缺省精度为 6。
举例:
CREATE TABLE S2.T3 (t datetime(1));
INSERT INTO S2.T3 VALUES('12:00:22.111');COMMIT;
INSERT INTO S2.T3 VALUES('12:00:11');COMMIT;
INSERT INTO S2.T3 VALUES('2024-1-15');COMMIT;
INSERT INTO S2.T3 VALUES('2024-1-15 16:17');COMMIT;
INSERT INTO S2.T3 VALUES('2024-1-15 16');COMMIT;
INSERT INTO S2.T3 VALUES('2024-1 16');COMMIT;
INSERT INTO S2.T3 VALUES('2024 1 23 13 11');COMMIT;
SELECT * FROM S2.T3;
语法:
TIME[(小数秒精度)]WITH TIME ZONE
说明:
描述一个带时区的 TIME 值,其定义是在 TIME 类型的后面加上时区信息。时区部分的实质是 INTERVAL HOUR TO MINUTE 类型,取值范围:-12:59 与 +14:00 之间。例如:TIME ‘09:10:21 +8:00’。
举例:
CREATE TABLE S2.T4 (t TIME(1) WITH TIME ZONE);
INSERT INTO S2.T4 VALUES('12:00:22.111');COMMIT;
SELECT * FROM S2.T4;
语法:
TIMESTAMP[(小数秒精度)]WITH TIME ZONE
说明:
描述一个带时区的 TIMESTAMP 值,其定义是在 TIMESTAMP 类型的后面加上时区信息。时区部分的实质是 INTERVAL HOUR TO MINUTE 类型,取值范围:-12:59 与 +14:00 之间。例如:’2009-10-11 19:03:05.0000 -02:10’。
举例:
CREATE TABLE S2.T5 (t TIMEstamp(1) WITH TIME ZONE);
INSERT INTO S2.T5 VALUES('12:00:22.111');COMMIT;
SELECT * FROM S2.T5;
语法:
TIMESTAMP[(小数秒精度)]WITH LOCAL TIME ZONE
说明:
描述一个本地时区的 TIMESTAMP 值,能够将标准时区类型 TIMESTAMP WITH TIME ZONE 类型转化为本地时区类型,如果插入的值没有指定时区,则默认为本地时区。
举例:
CREATE TABLE S2.T6 (t TIMEstamp(1) WITH local TIME ZONE);
INSERT INTO S2.T6 VALUES('1900-01-01 12:00:22.1');COMMIT;
INSERT INTO S2.T6 VALUES('1900-01-01 12:00:22.1 +08:00');COMMIT;
INSERT INTO S2.T6 VALUES('1900-01-01 12:00:22.1 +12:00');COMMIT;
SELECT * FROM S2.T6;
DM 支持两类十三种时间间隔类型:两类是年-月间隔类和日-时间隔类,它们通过时间间隔限定符区分,前者结合了日期字段年和月,后者结合了时间字段日、时、分、秒。由时间间隔数据类型所描述的值总是有符号的。需要查看更为详细的信息可参看《DM8_SQL 语言使用手册》1.4.3 节。
社区地址: https://eco.dameng.com/
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。