informix数据类型

合集下载
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

一. 内建的数据类型

1. 数字相关

1)INTEGER

整型,范围为:-2147483647-2147483648

2)SMALLINT

短整型,-32767-32767

3)INT8

长整型–(263–1) -263–1

4)DECIMAL(p,s)

可调整精度浮点型10-130-10124

SMALLINT和INTEGER的优势:

占用很小的空间,分别占用2个字节和4个字节

可以对他们执行算术表达式和排序操作

SMALLINT和INTEGER的劣势:

可以存储数值的范围有限

只有IDS才支持INT8,虽然占据的空间是INT的两倍,但是存储的数值的范围增大到:

–(263–1) -263–1

DECIMAL(p,s)的优势:

p指数据的精度,其范围从1到32,s则用以确定小数位数,是0的时候等同于DECIMAL(p)表示整数。他完整涵盖了SMALLFLOAT和FLOAT的表达范围。DECIMAL(p)占用的存储空间为p/2+1个字节,而DECIMAL(p,s)占用的存储空间,如果s是偶数,占用(p +3)/2个字节,s为奇数(p + 4)/2个字节。

DECIMAL(p,s)的劣势:

缺点是算术运算的效率比较低,且许多变成语言不支持此种格式。

4)SERIAL、SERIAL8、BIGSERIAL

这三种类型都会自动产生数据,并且用户可选择是否提供初始值.

不同之处在于:

SERIAL类型的数据占用4个字节的存储空间;

SERIAL8类型的数据一般情况下占用10个字节的存储空间(在Extended Parallel Serv er中占用8个字节的存储空间);

BIGSERIAL类型的数据占用8个字节的存储空间。

eg1. 创建一个表route_rule,它的主键rule_id是属于SERIAL自增类型的,参考建表语句如下:

create table route_rule

(

rule_id serial not null,

rule varchar(128) not null,

action varchar(32) not null,

route_arg varchar(32),

primary key (rule_id) constraint PK_ROUTE_RULE

);

eg2. 如何查询serial型字段的当前值?

5)DECIMAL(p,s)

其中p是整个数据的有效位,s是小数点后位数,1

eg1:在如下实例中,创建了human_task_exp表,其中probability为双精度类型:create table human_task_exp(

serviceid VARCHAR(30) not null,

seconds INTEGER default0not null,

probability DECIMAL(16,14) default0)

)

6)FLOAT、SMALLFLOAT

这两种类型的数据使用于不要求精度而要求量值的场合,如科学计算,FLOAT双精度数,通常占8个字节,有16位十进制有效位,而smallint为单精度数,占4字节,8位十进制有效位。但数值超出精度范围,则都看作0处理

同decimal完全相同,但显示money类型时候会自动显示现金符号,默认是$。

2. 时间相关

1)DATE

日期型,随数据库不同而不同.

eg1. test_date表中包含一个birthday的日期字段,可以通过如下语句插入:

创建表的语句参考如下:

CREATE TABLE test_date(birthday date);

插入记录(一条生日为1982年11月21日的数据)的语句参考如下:

insert into test_date values('11/21/1982');

也可通过如下语句执行如上语句相同的结果:

insert into test_date values(date('11/21/1982'));

eg2. 将DATE类型的数据转换为指定的字符类型

例如将上面的11/21/1982变成1982-11-21的类型.语句如下:

select TO_CHAR(birthday, '%Y-%m-%d') from test_date;

eg3. 获得当前日期

select today from test_date;

eg4. 日期相加减,得到天数,例如将test_date中的当前日期-birthday字段,可得到出生天数,语句如下:

select to_date(to_char(today,'%Y-%m-%d'),'%Y-%m-%d') - to_date(to_char(birthday,'%Y-%m-%d'),'% Y-%m-%d') from test_date;

对于1982-11-21,可得到如下的返回结果(oh,my god,我已经出生那么多天咯):1021100:00:00.00000

用于记录时间点,表示的精度可以任意指定,可以包含年份、月份、日。

eg1. 将表test_datetime的字段birthtime定义为DATETIME类型,建表语句参考如下:create table test_datetime(birthtime datetime year to fraction(2));

eg2. 若要在该表中插入一条1982-11-21 12:20:00的数据:

insert into test_datetime values('1982-11-21 12:20:00');

eg3. 插入eg2中同样的记录,还可以使用如下语句:

insert into test_datetime values(datetime(1982-11-2112:20:00.79) year to fraction(2));

eg4. 将DATE类型的数据转换为指定的字符类型:

select TO_CHAR(birthtime, '%Y-%m-%d %H:%M:%S') from test_datetime;

上面的出生时间的如上语句的结果如下:

1982-11-2112:20:00

3)INTERVAL

interval类型的数值用于表示两个时间点之间的间隔.

eg1. 将表test_interval的字段interval_filed字段定义为INTERVAL类型,并且只包含“时:分:秒”,建表语句参考如下:

create table test_interval(interval_filed interval hour to second);

eg2. 在上面创建的表中插入一条记录,时间是12:20:05,语句参考如下:

insert into test_interval values ('12:20:05');

eg3. 达到如上语句相同的结果也可以使用到interval函数,语句参考如下:

insert into test_interval values(interval(12:20:05) hour to second);

eg4. 将INTERVAL类型转换为指定的字符类型(HH:MM:SS格式,直接查询就是这个格式,嘻嘻),语句参考如下:

select*from test_interval;

运行结果就是:12:20:05。

3. 字符相关

1)VARCHAR(n, r)

相关文档
最新文档