一.  内建的数据类型
    1.  数字相关
          1)INTEGER
          整型,范围为:-2147483647-2147483648
          2)SMALLINT
           短整型,-32767-32767
          3)INT8
    长整型 –(263 –1) 263 –1
      4DECIMAL(p,s)
可调整精度浮点型10-130 - 10124   
SMALLINTINTEGER的优势:
占用很小的空间,分别占用2个字节和4个字节
可以对他们执行算术表达式和排序操作
SMALLINTINTEGER的劣势:
可以存储数值的范围有限
只有IDS才支持INT8,虽然占据的空间是INT的两倍,但是存储的数值的范围增大到:
–(263 –1) 263 –1
DECIMAL(p,s)的优势:
p指数据的精度,其范围从1到32,s则用以确定小数位数,是0的时候等同于DECIMAL(p)表示整数。他完整涵盖了SMALLFLOATFLOAT的表达范围。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 Server中占用8个字节的存储空间);
           BIGSERIAL类型的数据占用8个字节的存储空间。 
           eg1. 创建一个表route_rule,它的主键rule_id是属于SERIAL自增类型的,参考建表语句如下:
create table route_rule 

  rule_id       serial not nullinsert语句字段顺序,
  rule            varchar(128not null,
  action        varchar(32not null,
  route_arg  varchar(32),
  primary key (rule_id) constraint PK_ROUTE_RULE
);
          eg2. 如何查询serial型字段的当前值?
          5)DECIMAL(p,s)
          其中p是整个数据的有效位,s是小数点后位数,1<p<32,s可以为0。不指定时默认为16位。
          eg1:在如下实例中,创建了human_task_exp表,其中probability为双精度类型:
create table human_task_exp(
  serviceid   VARCHAR(30not null,
  seconds     INTEGER default 0 not null,
  probability DECIMAL(16,14) default 0)
)
          6)FLOAT、SMALLFLOAT
          这两种类型的数据使用于不要求精度而要求量值的场合,如科学计算,FLOAT双精度数,通常占8个字节,有16位十进制有效位,而smallint为单精度数,占4字节,8位十进制有效位。但数值超出精度范围,则都看作0处理
          7)MONEY(p, s)
          同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,我已经出生那么多天咯):
10211 00:00:00.00000
          2)DATETIME
          用于记录时间点,表示的精度可以任意指定,可以包含年份、月份、日。
           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-21 12:20:00.79year to fraction(2));
          eg4. 将DATE类型的数据转换为指定的字符类型:
select TO_CHAR(birthtime, '%Y-%m-%d %H:%M:%S'from test_datetime;
            上面的出生时间的如上语句的结果如下:
1982-11-21 12: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);

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。