DM数据类型
  # DM 数据类型
# 一、常规数据类型
# 1、字符数据类型
# CHAR 类型
 语法:CHAR[(长度)]
 功能:CHAR 数据类型指定定长字符串。
在基表中,
- 定义 
CHAR类型的列时,可以指定一个不超过 32767 的正整数作为字节长度,例如:CHAR(100)。 - 如果未指定长度,缺省为 1。
 - CHAR 类型列的最大存储长度由数据库页面大小决定,
CHAR数据类型最大存储长度和页面大小的对应关系请见下表 1.4.1。 - 但是,在表达式计算中,该类型的长度上限不受页面大小限制,为 32767。
 
表1.4.1 最大存储长度和页面大小的对应关系
| 数据库页面大小 | 实际最大长度 | 
|---|---|
| 4K | 1900 | 
| 8K | 3900 | 
| 16K | 8000 | 
| 32K | 16000 | 
# CHARACTER 类型
 语法:CHARACTER[(长度)]
 功能:与 CHAR 相同。
# VARCHAR / VARCHAR2 类型
 语法:VARCHAR[(长度 [CHAR])]
 功能:VARCHAR 数据类型指定变长字符串,用法类似 CHAR 数据类型,可以指定一个不超过 32767 的正整数作为字节或字符长度,例如:
VARCHAR (100)指定 100 字节长度;VARCHAR(100 CHAR)指定 100 字符长度。- 如果未指定长度,缺省为 8188 字节。
 
区别:
CHAR同VARCHAR的区别在于前者长度不足时,系统自动填充空格,而后者只占用实际的字节空间。- 另外,实际插入表中的列长度要受到记录长度的约束,每条记录总长度不能大于页面大小的一半。
 
# ROWID 类型
 语法:ROWID
 功能:
ROWID类型数据由 18 位字符组成,用来表示ROWID数据。- 18 位字符由 “4 位站点号 +6 位分区号 +8 位物理行号” 组成。
 ROWID类型数据可通过SF_BUILD_ROWID()构造而来。- 表中的 
ROWID类型列,可以用于排序或创建索引。 - 但是 
ROWID类型不支持作为分区列和自定义类型的属性数据类型。 ROWID列与字符类型一样,支持MAX,MIN等集函数,不支持SUM,AVG等集函数。
# 2、数值数据类型
# (1)精确数值数据类型
# NUMERIC 类型
 语法:NUMERIC[(精度 [, 标度])]
 功能:
NUMERIC数据类型用于存储零、正负定点数。
其中:
精度是一个无符号整数,定义了总的数字数,精度范围是 1 至 38。标度定义了小数点右边的数字位数。一个数的标度不应大于其精度,如果实际标度大于指定标度,那么超出标度的位数将会四舍五入省去。- 例如:
NUMERIC(4,1)定义了小数点前面 3 位和小数点后面 1 位,共 4 位的数字,范围在-999.9到999.9。 
所有 NUMERIC 数据类型,
- 如果其值超过精度,DM 会返回一个出错信息,
 - 如果超过标度,则多余的位会被截断。
 - 如果不指定精度和标度,缺省精度由 
INI参数DECIMAL_ENHANCED决定,标度不应大于其精度。 - 当 
DECIMAL_ENHANCED=1,缺省精度为 40; - 当 
DECIMAL_ENHANCED=0,缺省精度为 38。 
# DECIMAL 类型
 语法:DECIMAL[(精度 [, 标度])]
 功能:与 NUMERIC 相似。
# DEC 类型
 语法:DEC[(精度[, 标度])]
 功能:与 DECIMAL 相同。
# NUMBER 类型
 语法:NUMBER[(精度[, 标度])]
 功能:与 NUMERIC 相同。
# INTEGER 类型
 语法:INTEGER
 功能:
用于存储有符号整数,精度为 10,标度为 0。
取值范围为:
-2147483648 (-2^31)~+2147483647(2^31-1)。int- 4 字节,4 * 8 = 32
# INT 类型
 语法:INT
 功能:与 INTEGER 相同。
# BIGINT 类型
 语法:BIGINT
 功能:
- 用于存储有符号整数,精度为 19,标度为 0。
 - 取值范围为:
-9223372036854775808(-2^63)~9223372036854775807(2^63-1)。 bigint- 8 字节,8 * 8 = 64
# TINYINT 类型
 语法:TINYINT
 功能:
- 用于存储有符号整数,精度为 3,标度为 0。
 - 取值范围为:
-128(-2^7)~+127(2^7)。 tinyint- 1 字节,1 * 8 = 8
# BYTE 类型
 语法:BYTE
 功能:
- 与 
TINYINT相似,精度为 3,标度为 0。 
# SMALLINT 类型
 语法:SMALLINT
 功能:
- 用于存储有符号整数,精度为 5,标度为 0。
 - 取值范围为:
-32768(-2^15)~+32767(2^15-1)。 smallint- 2 字节,2 * 8 = 16
# BINARY 类型
 语法:BINARY[(长度)]
 功能:
BINARY数据类型用来存储定长二进制数据。
在基表中,
- 定义 
BINARY类型的列时,其最大存储长度由数据库页面大小决定,可以指定一个不超过其最大存储长度的正整数作为列长度。 - 缺省长度为 1 个字节。
 - 最大存储长度见【上表 1.4.1】。
 BINARY类型在表达式计算中的长度上限为 32767。BINARY常量以0x开始,后面跟着数据的十六进制表示,例如:0x2A3B4058。
# VARBINARY 类型
 语法:VARBINARY[(长度)]
 功能:
VARBINARY数据类型用来存储变长二进制数据,用法类似BINARY数据类型,可以指定一个不超过 32767 的正整数作为数据长度。- 缺省长度为 8188 个字节。
 VARBINARY数据类型的实际最大存储长度由数据库页面大小决定,具体最大长度算法与VARCHAR类型的相同,其在表达式计算中的长度上限也与VARCHAR类型相同,为 32767。
# RAW 类型
 语法:RAW[(长度)]
 功能:
- 与 
VARBINARY相同。 
# (2)近似数值数据类型
# FLOAT 类型
 语法:FLOAT[(精度)]
 功能:
FLOAT是带二进制精度的浮点数,精度范围(1~126)。- 当精度小于等于 24 时,DM 将其转换为标准 C 语言中的 
REAL类型; - 当精度大于 24 时,转换为标准 C 语言中的 
DOUBLE类型。 FLOAT取值范围-1.7976931348623158*10^308~1.7976931348623158*10^308。
# DOUBLE 类型
 语法:DOUBLE[(精度)]
 功能:
DOUBLE是带二进制精度的浮点数。DOUBLE类型的设置是为了移植的兼容性。- 该类型直接使用标准 C 语言中 
DOUBLE。 - 精度与取值范围与 
FLOAT一样。 
# REAL 类型
 语法:REAL
 功能:
REAL是带二进制精度的浮点数。- 但它不能由用户指定使用的精度,系统指定其二进制精度为 24,十进制精度为 7。
 - 取值范围 
-3.4*10^38~3.4*10^38。 
# DOUBLE PRECISION 类型
 语法:DOUBLE PRECISION[(精度)]
 功能:
- 该类型指明双精度浮点数。
 DOUBLE PRECISION类型的设置是为了移植的兼容性。- 该类型直接使用标准 C 语言中 
DOUBLE。 - 精度与取值范围与 
FLOAT一样。 
# 二、位串数据类型
# BIT 类型
 语法:BIT
 功能:
BIT类型用于存储整数数据1、0 或 NULL,只有 0 才转换为假,其他非空、非 0 值都会自动转换为真,可以用来支持 ODBC 和 JDBC 的布尔数据类型。- DM 的 
BIT类型与 SQL SERVER2000 的BIT数据类型相似。 - 功能与 ODBC 和 JDBC 的 
BOOL相同。 
# 三、日期时间数据类型
日期时间数据类型分为一般日期时间数据类型、时间间隔数据类型和时区数据类型三类,用于存储日期、时间和它们之间的间隔信息。
# 1、一般日期时间数据类型
# DATE 类型
 语法:DATE
 功能:
DATE类型包括年、月、日信息,定义了'-4712-01-01'和'9999-12-31'之间任何一个有效的格里高利日期。- DM 支持儒略历,并考虑了历史上从儒略历转换至格里高利日期时的异常,将 
'1582-10-05'到'1582-10-14'之间的日期统一当做'1582-10-15'处理。 
DATE 值的书写方式有两种:一是 DATE '年月日';二是 '年月日'。
其中,年月日之间可以使用分隔符或者没有分隔符。
分隔符是指除 大小写字母、数字 以及 双引号 之外的所有 单字节字符 且是可打印的。
例如:空格、回车键、tab 键、- 、/ 、, 、.、 : 、* 等标点符号。
年月日中第一个非 0 数值前的 0 亦可省略,例如:'0001-01-01' 等价于 '1-1-1'。
例如:
CREATE TABLE T2(C1 DATE,C2 DATE,C3 DATE );
INSERT INTO T2 VALUES(DATE '1999-10-01','1999/10/01','1999.10.01');
 2
3
# TIME 类型
 语法:TIME[(小数秒精度)]
 功能:
TIME类型包括时、分、秒信息,定义了一个在'00:00:00.000000'和'23:59:59.999999'之间的有效时间。TIME类型的小数秒精度规定了秒字段中小数点后面的位数,取值范围为 0~6,如果未定义,缺省精度为 0。
TIME 值的书写方式有两种:一是 TIME '时:分:秒';二是 '时:分:秒'。
例如:
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');
 2
3
# TIMESTAMP 类型
 语法:TIMESTAMP[(小数秒精度)]
 功能:
TIMESTAMP类型包括年、月、日、时、分、秒信息,定义了一个在'-4712-01-01 00:00:00.000000000'和'9999-12-31 23:59:59.999999999'之间的有效格里高利日期时间。TIMESTAMP类型的小数秒精度规定了秒字段中小数点后面的位数,取值范围为 0~9,如果未定义,缺省精度为 6。- 与 DATE 类型相同,DM 不计算 
'1582-10-05'到'1582-10-14'之间的 10 天。 
TIMESTAMP 值的书写方式有两种:一是 TIMESTAMP' <DATE 值 > <TIME 值 >';二是 '<DATE 值 > <TIME 值 >'。
语法中,TIMESTAMP 也可以写为 DATETIME。
例如:
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' );
 2
3
# 2、时间间隔数据类型
DM 支持两类十三种时间间隔类型:
两类是:年-月间隔类 和 日-时间隔类,它们通过时间间隔限定符区分,前者结合了日期字段年和月,后者结合了时间字段日、时、分、秒。由时间间隔数据类型所描述的值总是有符号的。
需要说明的是,使用时间间隔数据类型时,如果使用了其引导精度的默认精度,要注意保持精度匹配,否则会出现错误。如果不指定精度,那么将使用默认精度。
# 3、时区数据类型
DM 支持两种时区类型:标准时区类型 和 本地时区类型。
# 四、多媒体数据类型
多媒体数据类型的字值有两种格式:
- 一是 
字符串,例如:'ABCD', - 二是 
BINARY,例如:0x61626364。 
注意:
TEXT、LONG、LONGVARCHAR、CLOB只支持字符串。BFILE不适用上面两种格式。BFILE指明的文件只能只读访问。BINARY格式的多媒体数据类型以及BFILE数据类型不支持比较。- 不支持为多媒体数据类型的字段指定精度。
 
# TEXT 类型
 语法:TEXT
 功能:
TEXT为变长字符串类型。- 其字符串的长度最大为 
100G-1字节。 - DM 利用它存储长的文本串。
 
# LONG、LONGVARCHAR(又名 TEXT)类型
 语法:LONG/LONGVARCHAR
 功能:与 TEXT 相同。
# IMAGE 类型
 语法:IMAGE
 功能:
IMAGE用于指明多媒体信息中的图像类型。- 图像由不定长的象素点阵组成,长度最大为 
100G-1字节。 - 该类型除了存储图像数据之外,还可用于存储任何其它二进制数据。
 
# LONGVARBINARY(又名 IMAGE)类型
 语法:LONGVARBINARY
 功能:与 IMAGE 相同。
# BLOB 类型
 语法:BLOB
 功能:
BLOB类型用于指明变长的二进制大对象,长度最大为100G-1字节。
# CLOB 类型
 语法:CLOB
 功能:
- 与 
TEXT相同。 
# BFILE 类型
 语法:BFILE
 功能:
BFILE用于指明存储在操作系统中的二进制文件,- 文件存储在操作系统而非数据库中,
 - 仅能进行只读访问。