GBase 8a MPP Cluster SQL学习笔记——浮点类型

GBase 8a MPP Cluster SQL学习笔记1

由于关系型数据库采用表格的形式来组织和存储数据,并使用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 时,则小数部分四舍五入。

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

高山莫衣

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值