在gbase8s数据库中
浮点数据类型为
SMALLFLOAT 4 字节 单精度浮点数 精度为8位
FLOAT (DOUBLE PRECISION) 8 字节 双精度浮点数 精度为16位
DECIMAL(p) 1 + p/2 个字节向上取整
DECIMAL(p,s) NUMERIC(p,s) (p +3)/2 个字节(如果小数位是偶数)或 (p + 4)/2 个字节(如果小数位是奇数)向上取整
其中 SMALLFLOAT 、FLOAT存储上遵循IEEE754标准
create table t1(c1 float,c2 smallfloat);
insert into t1 values(0.1,0.1);
以float为例 简单计算如下
0.1
0.1 * 2=0.2 0
0.2 * 2=0.4 0
0.4 * 2=0.8 0
0.8 * 2=1.6 1
0.6 * 2=1.2 1
0.2 * 2=0.4 0
...
0.00011 0011 0011 0011...0100 = 1.1001100110011... * 10 ^ -4
小数部分
1001100110011001100110011001100110011001100110011010
指数+偏移量
0011 1111 1011
符号位(1)+指数和偏移(2-12)+尾数(13-64)
0 011 1111 1011 1001100110011001100110011001100110011001100110011010
整理格式
0011 1111 1011 1001 1001 1001 1001 1001 1001 1001 1001 1001 1001 1001 1001 1010
16进制
3FB999999999999A
smallfloat 计算与 float 类似
decimal 存储如下
create table t2(c1 decimal(16);
insert into t2 values(0.1);
insert into t2 values(0.2);
insert into t2 values(1.1);
insert into t2 values(111.11);
insert into ss values(3.5);
未找到具体存储的资料,根据测试数据猜测为
c (未知) 0/1/2 标识整数部分所占字节,为0 时 整数位0,其余则为小数部分
按照上述规则则实际存储为 0.10、0.20、1.11、111.11、3.5
DECIMAL(p,s) 存储与DECIMAL(p)类似
时间类型
date 4字节
create table t3 (c1 int,c2 date);
insert into t3 values(1,sysdate);
0xb179转换为10进制为45433
date类型为 1899 年 12 月 31 日午夜开始的整天数
datetime
DATETIME 数据类型存储从公元 1 年开始的时期中的任何时刻。事实上,DATETIME 实际上是 28 种数据类型的一个系列,其中每种数据类型都具有不同的精度。
timestamp(n) datetime year to second/fraction(n) 同义词