PostgreSQL-数值类型

这篇具有很好参考价值的文章主要介绍了PostgreSQL-数值类型。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

数值类型是最常用的几种数据类型之一,主要分为:

  • 整型
  • 浮点型
  • 精确小数

数值类型介绍

数值类型列表
类型名称 存储空间 描述 范围
smallint 2字节 小范围的整数。Oracle中没有此数值类型,使用number代替 -2^15 ~ 2^15-1
int 或 integer 4字节 常用的整数。Oracle中integer等同于number(38),与此类型的意义不同 -2^31 ~ 2^31-1
bigint 8字节 大范围的整数。Oracle中没有此数值类型,使用number代替 -2^63 ~ 2^63-1
numeric或decimal 变长 用户声明的精度,精确。注意,Oracle中叫number,与PG中的名称不一样 不限制
real 4字节 变精度,不精确 6位十进制数字精度
double precision 8字节 变精度,不精确 15位十进制数字精度
serial 4字节 自增整数 1~2^31-1
bigserial 8字节 大范围的自增整数 1~2^63-1

整数类型

整数类型有三种:

  • smallint
  • int
  • bigint

注意:PG中没有MySql中的tinyint(1字节)、mediumint(3字节)这两种类型,也没有MySql中的unsigned类型。

常用的数据类型是int(或integer),因为它提供了在范围、存储空间、性能之间的最佳平衡。一般只有在磁盘空间紧张的时候才使用smallint类型。通常,只有integer类型的取值范围不够时才使用bigint类型,因为前者的执行速度绝对快得多。

SQL只声明了整数类型integer或int和smallint。

  1. int与integer和int4是等效的
  2. smallint与int2是等效的
  3. bigint与int8是等效的

精确的小数类型

  • numeric
  • numeric(m,n)
  • numeric(m)

numeric与decimal类型是等效的,这两种类型都是SQL标准,可以存储最多1000位精度的数字,并且可准确地进行计算。它们特别适用于货币金额和其他要求精确计算的场合。不过,基于numeric类型的算术运算相比于基于整数类型或者下面介绍的浮点数类型的算术运算,其速度要慢很多。

如果要声明一个字段的类型是numeric,可以用下面的语句:

NUMERIC(precision,scale)

其中,精度precision必须为正数,标度scale可以为0或者正数。

NUMERIC(precision)表示标度为0,与NUMERIC(precision,0)的含义是相同的。

如果不带任何精度和标度地声明NUMERIC,则表示创建一个可以存储任意精度和标度的数值(当然不能超过系统可以实现的精度和标度)

在标准SQL和MySql中,语法DECIMAL等价于DECIMAL(M,0),M在MySql中默认为10,PG中因作用不大而把它改成了一个任意精度和标度的数值。如果你关心移植性,建议总是明确声明精度和标度

create table t1(id1 numeric(3),id2 numeric(3,0),id3 numeric(3,2),id4 numeric);
insert into t1 values(3.1,3.5,3.123,3.123);
select * from t1;

PostgreSQL-数值类型

insert into t1 values(3.1,3.5,13.123,3.123);

PostgreSQL-数值类型

  • 若字段声明了标度,超过小数点位数的标度会自动四舍五入后进行存储
  • 没有声明精度也没有声明标度地numeric类型,会原样存储
  • 声明了精度的数值,如果INSERT语句插入的数值超出声明的精度范围,则会报错

浮点数类型

数据类型real和double precision是不精确的、变精度的数字类型。

浮点数需要注意以下几个方面:

  • 如果要求精确地计算(比如计算货币金额),应使用nmeric类型
  • 如果想用这些类型做任何重要的复杂计算,尤其是那些对范围情况(无穷/下溢)严重依赖的复杂计算,应该仔细评估你的实现
  • 对两个浮点数值进行相等性比较时,有可能不会像你所想象的那样运转

除了普通的数字值之外,浮点类型还有以下几个特殊值:

  • Infinity:正无穷大
  • -Infinity:负无穷大
  • NaN:不是一个数字

这些值的含义可能不是预期的,如果在SQL命令里把这些数值当作常量来写,必须在它们周围放上单引号,如:“UPDATE table SET x=‘Infinity’”。输入时,这些值与大小无关

序列类型

在序列类型中,serial和bigserial与MySQL中的自增字段含义相同

PG实际上通过序列(sequence)实现的。PG数据库与Oracle一样有序列,而MySQL中没有序列,示例如下:

create table t(id SERIAL);

等价于

create sequence t_id_seq;
create table t(
	id integer not null default nextval('t_id_seq')
);
alter sequence t_id_seq owned by tt.id;

货币类型

货币类型可以存储固定小数的货币数目,与浮点数不同,它是完全保证精度的。其输出格式与参数lc_monetary的设置有关,不同的国家其货币输出格式也不相同,示例如下:

select '12.32'::money;

PostgreSQL-数值类型

show lc_monetary;

PostgreSQL-数值类型

set lc_monetary = 'en_US';
select '12.32'::money;

PostgreSQL-数值类型

money类型占用8字节空间来存储数据,表示的范围为-92233720368547758.08到+92233720368547758.07文章来源地址https://www.toymoban.com/news/detail-433899.html

到了这里,关于PostgreSQL-数值类型的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • [python]数值类型

    表示的数值没有小数部分的数值,包含正整数、复数和0 整数类型有四种表示形式:二进制、八进制、十进制和十六进制 进制种类 引导符号 描述 十进制 无 默认情况,例如:365,786 二进制 0b或0B 由字符0和1组成,例如0b10101 八进制 0o或0O 由字符0到7组成,例如0o763 十六进制

    2024年01月19日
    浏览(30)
  • 21 - 数值类型

    数值类型是不可变类型(immutable type),它包括布尔类型、整数、浮点数与复数。 类型 英文名 构造方式 对应 构造函数 布尔 Boolean var = True bool bool() 整数 Integer var = 5 int int() 浮点数 Float var = 5.0 float float() 复数 Complex Number var = 5.0 + 0j complex complex() 在 Python 中有八种比较运算

    2024年02月19日
    浏览(26)
  • 数值类型翻转教学设计

    任务描述 本关任务:编写一个能计算正方形面积的小程序。 相关知识 为了完成本关任务,你需要掌握: 1.输入函数 2.字符串转整数 3.数值运算 4.输出函数 任务描述 本关任务:编写一个能计算正方形面积的小程序。 相关知识 为了完成本关任务,你需要掌握: 1.输入函数 2

    2024年02月12日
    浏览(45)
  • C++标准模板(STL)- 类型支持 (数值极限,C 数值极限接口)

    参阅 std::numeric_limits 接口 定义于头文件 cstdint PTRDIFF_MIN (C++11) std::ptrdiff_t 类型对象的最小值 (宏常量) PTRDIFF_MAX (C++11) std::ptrdiff_t 类型对象的最大值 (宏常量) SIZE_MAX (C++11) std::size_t 类型对象的最大值 (宏常量) SIG_ATOMIC_MIN (C++11) std::sig_atomic_t 类型对象的最小值 (宏常量) SIG_ATOMIC_

    2024年02月07日
    浏览(30)
  • python教程 入门学习笔记 第6天 数据类型转换 字符串转换成数值 数值之间互转 其它类型转字符串

    s1=\\\"188\\\" #字符串 ns1=int(s1) #转换成整型数值 print(ns1+8) #打印数值结果 s1=\\\"3.14\\\" #字符串 ns1=float(s1) #转换成浮点型数值 print(ns1+3) #打印数值结果(数值结果为6.140000000000001,出现误差,后面讲解决办法) print(type(ns1)) #获取新数值的数据类型属性 z1=78 nz1=float(z1) print(nz1) #打印结果

    2024年02月14日
    浏览(54)
  • Python判断输入的数是否为数值类型,如果是则指出类型

    题目:Python:判断输入的数是否为数值类型(int或float),如果可以的话,请指出类型。 情景: 假如有个程序,输入a和b两个数,程序可以判断a和b到底是不是数值类型(即是整数还是浮点数),若不是则要求用户重新输入,若是则对a和b进行运算(+-*/等),如果可以的话请转

    2024年02月06日
    浏览(36)
  • Spring 类型转换、数值绑定与验证(一)— DataBinder

     DataBinder 是Spring用于数据绑定、类型转换及验证的类。使用场景有:1)xml配置文件定义bean,Spring 内部使用DataBinder 来完成属性的绑定;2)Web请求参数绑定,在Spring MVC 中,Controller的方法参数通常会自动绑定到请求参数中,主要用DataBinder来完成。3)自定义数据绑定,可手动创

    2024年02月22日
    浏览(32)
  • 为什么Flink-CDC读取Decimal等数值类型变成了非数值字符串

    每遇到一个问题,在经过努力研究明白之后,总想写点东西记录。怎奈又没这个好习惯,过了一两天这个激情就没了,想写也写不出来了。最近在做一个flink-cdc采集数据的测试和产品化开发,遇到一个数据转换的问题,折腾了我两个早上,有些心血来潮,就记录一下吧,对我

    2023年04月09日
    浏览(41)
  • Python基础教程:基本数字类型与数值计算,Pythonui基础

    print(isinstance(a,int)) print(isinstance(b,str)) 执行结果: class ‘int’ class ‘float’ class ‘bool’ class ‘complex’ True False 两者的区别: type()不会认为子类是一种父类类型。 isinstance()会认为子类是一种父类类型。 class A: pass class B(A): pass print(isinstance(A(),A)) print(type(A()) == A) print(isinstan

    2024年04月17日
    浏览(31)
  • 数值计算 - 常用函数值计算方法

    什么是秦九韶算法?         可以把多项式改写为便于递推的形式: 什么是泰勒展开式?         泰勒公式,也称泰勒展开式。是用一个函数在某点的信息,描述其附近取值的公式。如果函数足够平滑,在已知函数在某一点的各阶导数值的情况下,泰勒公式可以利用

    2024年02月06日
    浏览(58)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包