PostgreSQL-数值类型

news2024/11/24 4:44:12

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

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

数值类型介绍

数值类型列表
类型名称存储空间描述范围
smallint2字节小范围的整数。Oracle中没有此数值类型,使用number代替-2^15 ~ 2^15-1
int 或 integer4字节常用的整数。Oracle中integer等同于number(38),与此类型的意义不同-2^31 ~ 2^31-1
bigint8字节大范围的整数。Oracle中没有此数值类型,使用number代替-2^63 ~ 2^63-1
numeric或decimal变长用户声明的精度,精确。注意,Oracle中叫number,与PG中的名称不一样不限制
real4字节变精度,不精确6位十进制数字精度
double precision8字节变精度,不精确15位十进制数字精度
serial4字节自增整数1~2^31-1
bigserial8字节大范围的自增整数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;

image

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

image

  • 若字段声明了标度,超过小数点位数的标度会自动四舍五入后进行存储
  • 没有声明精度也没有声明标度地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;

image

show lc_monetary;

image

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

image

money类型占用8字节空间来存储数据,表示的范围为-92233720368547758.08到+92233720368547758.07

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/489803.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

日常开发为什么需要做Code Review

日常开发为什么需要做Code Review 一、背景 最近在开始一个新的项目,在查看项目中代码及具体细节时,发现这个项目真实一堆乱麻,没有规律可循,可总结下这个项目的缺陷 没有规律可循,没有结构性设计不做公共封装&#…

08_Uboot顶层Makefile分析_make过程

目录 make 过程 make 过程 配置好 uboot 以后就可以直接make 编译了,因为没有指明目标,所以会使用默认目标,主 Makefile 中的默认目标如下: 目标_all 又依赖于all,如下所示: 如果KBUILD_EXTMOD为空的话_all 依 赖 于all 。这 里 不 编 译 模 块,所 以KBUILD_EXTMOD肯定为空,_…

二分分类.

2.1 二分分类 在神经网络的计算中,通常先有一个叫做前向暂停(forward pause)或叫做前向传 播(foward propagation)的步骤,接着有一个叫做反向暂停(backward pause) 或叫做反向传播 (backward propagation)的步骤。 一张图片在计算机中是如何表示的&…

4。计算机组成原理(1)数据表示和运算

嵌入式软件开发,非科班专业必须掌握的基本计算机知识 核心知识点:数据表示和运算、存储系统、指令系统、总线系统、中央处理器、输入输出系统 一 进位计数法和不同进制数的相互转换 其他进制(b),转十进制的计算公式 十进制数,转…

Linux系统编程——多线程[上]:线程概念和线程控制

目录 1.再谈页表 2.Linux线程概念 2.1pthread原生库的基本使用 2.2PID和LWP 2.3Linux线程的资源以及优缺点 2.4Linux线程健壮性问题 2.5可重入函数和线程独立栈 3.Linux线程控制 3.1Linux线程终止 3.2Linux线程等待 3.3线程取消 3.4线程分离 使用线程库的注意事项…

【Python入门】Python基础语法

前言 📕作者简介:热爱跑步的恒川,致力于C/C、Java、Python等多编程语言,热爱跑步,喜爱音乐的一位博主。 📗本文收录于Python零基础入门系列,本专栏主要内容为Python基础语法、判断、循环语句、函…

净利润同比增长48.9%,中国平安“一览众山小”

中国平安价值迸发的速度,或许超过了所有人的想象。 4月26日晚,中国平安发布2023年一季度业绩报告,许多自媒体用“炸裂”来形容其亮眼的财务数据。财报显示,第一季度,集团实现营收2537.78亿元,同比增长30.8…

农机电招平台~java

摘要 随着农机电招行业的不断发展,农机电招在现实生活中的使用和普及,农机电招行业成为近年内出现的一个新行业,并且能够成为大群众广为认可和接受的行为和选择。设计农机电招平台的目的就是借助计算机让复杂的销售操作变简单,变…

LeetCode:383. 赎金信

🍎道阻且长,行则将至。🍓 🌻算法,不如说它是一种思考方式🍀 算法专栏: 👉🏻123 题解目录 一、🌱[383. 赎金信](https://leetcode.cn/problems/ransom-note/)…

DOM概述

DOM概述 什么是DOM对象树化的DOM模型DOM 节点 如何获取DOM元素如何更改我们的DOM模型常用属性修改控制样式属性 事件事件监听 事件类型鼠标事件键盘事件焦点事件文本框输入事件 事件对象回调函数DOM 节点插入节点插入节点删除节点查找节点父子关系兄弟关系 什么是DOM 当网页被…

SPSS如何进行因子分析和主成分分析之案例实训?

文章目录 0.引言1.因子分析2.主成分分析 0.引言 因科研等多场景需要进行绘图处理,笔者对SPSS进行了学习,本文通过《SPSS统计分析从入门到精通》及其配套素材结合网上相关资料进行学习笔记总结,本文对因子分析和主成分分析进行阐述。 1.因子分…

Android:LeakCanary原理的简单理解和使用

LeakCanary原理的简单理解和使用 1、背景2、LeakCanary2.1、LeakCanary 工作原理2.1.1、检测未被 GC 回收的对象2.1.2、转储堆2.1.3、分析堆2.1.4、对泄漏进行分类 2.2、LeakCanary 使用2.2.1、引入依赖2.2.1.1、原理 2.2.2、配置 LeakCanary2.2.3、检测内存泄漏 3、Fragment 和…

Hystrix断路器 (豪猪)-保险丝

一、概述 重点:能让服务的调用方,够快的知道被调方挂了!不至于说让用户在等待。 Hystix 是 Netflix 开源的一个延迟和容错库,用于隔离访问远程服务、第三方库,防止出现级联失败(雪崩)。 雪崩&am…

自动驾驶行业观察之2023上海车展-----车企发展趋势(2)

自主品牌发展 比亚迪:展示3款新车,均于2023年年内上市 比亚迪在本次展会上推出了3款新车:宋L概念车(王朝系列)、驱逐舰07(海洋系列)、海鸥(海洋系列)。 • 宋L&#x…

FreeRTOS:任务的创建和删除

目录 一、函数xTaskCreate二、函数xTaskCreateStatic三、函数xTaskCreateRestricted四、函数vTaskDelete五、任务创建和删除(动态)代码5.1实验要求5.2程序代码 一、函数xTaskCreate 此函数用来创建一个任务,任务需要RAM来保存与任务有关的状…

Mysql数据库基本操作(增删改查)

目录 一、数据库的基本操作1.1 登录数据库1.2 创建数据库并进入数据库 二、查看数据库结构2.1 查看数据库信息2.2 查看数据库中包含的表及表结构2.3、常用的数据库类型 三、Mysql数据文件3.1 MYD文件3.2 MYI文件3.3 MyISAM存储引擎 四、SQL 语句1、 DDL数据定义语言1.1 删除指定…

〖Python网络爬虫实战㉒〗- 数据存储之数据库详解

订阅:新手可以订阅我的其他专栏。免费阶段订阅量1000 python项目实战 Python编程基础教程系列(零基础小白搬砖逆袭) 说明:本专栏持续更新中,目前专栏免费订阅,在转为付费专栏前订阅本专栏的,可以免费订阅付…

Eureka、Zookeeper、Consul服务注册与发现

一、Eureka服务注册与发现 1.1 概念 Eureka 是 Netflix 公司开源的一个服务注册与发现的组件 。 Eureka 和其他 Netflix 公司的服务组件(例如负载均衡、熔断器、网关等) 一起,被 Spring Cloud 社区整合为Spring-Cloud-Netflix 模块。 Eure…

校招失败后,在小公司熬了 2 年终于进了百度,竭尽全力....

其实两年前校招的时候就往百度投了一次简历,结果很明显凉了,随后这个理想就被暂时放下了,但是这个种子一直埋在心里这两年除了工作以外,也会坚持写博客,也因此结识了很多优秀的小伙伴,从他们身上学到了特别…

【JavaEE】TCP协议的十大原理保姆讲解(Transmission Control Protocol)

博主简介:想进大厂的打工人博主主页:xyk:所属专栏: JavaEE初阶 上一篇文章讲了UDP协议,那么这篇文章我来讲讲TCP协议,TCP协议相对UDP协议难一些,内容相对更多。 TCP,即Transmission Control Protocol&…