GBase 8a MPP Cluster SQL学习笔记1
- 1、FLOAT
- 2、DOUBLE
- 3、DECIMAL
由于关系型数据库采用表格的形式来组织和存储数据,并使用SQL语言来进行数据的操作和查询。基础内容学习使用在线编译工具:Online SQL 进行模拟。
前4为整数类型、后三为浮点类型
1、FLOAT
FLOAT 代表一个浮点型数值,占用 4 个字节,它所存储的数值不是一个准确值。允许的值是-3.402823466E+38 到-1.175494351E-38,0,1.175494351E-38 到 3.402823466E+38。这些是理论限制,基于 IEEE 标准。实际的范围根据硬件或操作系统的不同可能稍微小些。
GBase 8a 允许在关键字 FLOAT 后面的括号内选择用位指定精度,即FLOAT(X)。0 到 23 的精度对应 FLOAT 列的 4 字节单精度,24 到 53 的精度对应 DOUBLE 列的 8 字节双精度。当 24<=X<=53 时,FLOAT(X)与 DOUBLE(X)等价。
同时 GBase 8a 允许使用非标准语法 FLOAT(M,D)(M 是整数位数和小数位数的总位数,D 是小数的个数),GBase 8a 保存值时进行四舍五入。
示例 1:定义的列数据类型为 FLOAT。
示例中用到的表及数据:
测试
create table products(pro FLOAT);
select * from products;
insert into products(pro) values(-100.0),(12.34),(45.5);
select pro from products;
输出
-100.0
12.34
45.5
示例 2:定义的列数据类型为 FLOAT(M),总位数小于等于 23 时,小数部分只保留一位有效数字,系统会自动对数字进行四舍五入。
定义的列数据类型为 FLOAT(M),总位数大于 23 时,小数位最大支持15 位数字。
示例中用到的表及数据:
create table products(a FLOAT(20), b FLOAT(28));
insert into products(a, b) values(-19000.44356, -19000.44365);
select * from products;
示例 3:定义的列数据类型为 FLOAT(20,5),指定精度为 5,则小数部分保留 5 位数字。
示例中用到的表及数据:
create table products(a float(20,2));
insert into products(a) values(-19000.44356);
select * from products;
示例 4:定义的列数据类型为 FLOAT(7,4),插入的数据为 999.00009 时,其近似值就是 999.0001,自动四舍五入。
示例中用到的表及数据:
create table products(a float(7,4));
insert into products(a) values(999.00009);
select * from products;
2、DOUBLE
DOUBLE 代表一个浮点型数值,占用 8 个字节,它所存储的数值不是一个准确值。允许的值是-1.7976931348623157E+308 到-2.2250738585072014E-308、0、2.2250738585072014E-308 到1.7976931348623157E+308。这些是理论限制,基于 IEEE 标准。实际的范围根据硬件或操作系统的不同可能稍微小些。
create table products(a double);
insert into products(a) values(-999.4436);
desc products;
3、DECIMAL
DECIMAL[(M[, D])]代表一个精确值,它所存储的数值范围是-(1E+M -1)/(1E+D)到(1E+M -1)/(1E+D)。
salary DECIMAL(5,2)
在 DECIMAL(5,2)中,5 表示总位数(整数位和小数位的位数总和),2是小数位数。可以存储在 salary 列的最小值是-999.99,最大值是 999.99。
值的最大范围受限于给定的精度和小数范围。超过小数范围时,会按四舍五入的原则截断为设定小数位数。
在定义 DECIMAL 数据列时,如果 M 和 D 同时省略,则 M 取值为 10,D 取值为 0,即 DECIMAL(10,0),如果只指定 M 值,省略 D 值,那么插入一个非整数值的数字时,将按照四舍五入的原则截取到整数位。
示例 1:定义的列数据类型为 DECIMAL(18,5)。
create table products(a DECIMAL(18, 5));
insert into products(a) values(19000.44365);
desc products;
select a from products;
示例 2:定义的列数据类型为 DECIMAL,M 和 D 均省略,那么 M 默认值为10,D 默认值为 0
示例 3:定义列数据类型为 DECIMAL(M,D),插入的数据超出总位数 M时,报告错误信息;超出精度 D 时,则小数部分四舍五入。