pgsql数据类型:整数类型

smallint 2字节 小范围整数 -32768 to +32767
integer 4字节 整数的典型选择 -2147483648 to +2147483647
bigint 8字节 大范围整数 -9223372036854775808 to +9223372036854775807
decimal 可变 用户指定精度,精确 最高小数点前131072位,以及小数点后16383位
numeric 可变 用户指定精度,精确 最高小数点前131072位,以及小数点后16383位
real 4字节 可变精度,不精确 6位十进制精度
double precision 8字节 可变精度,不精确 15位十进制精度
smallserial 2字节 自动增加的小整数 1到32767
serial 4字节 自动增加的整数 1到2147483647
bigserial 8字节 自动增长的大整数 1到9223372036854775807

整数

smallint、integer(或者int)、bigint。对应的扩展是int2、int4、int8

db=# create table demo_int(
db(# int2 int2,
db(# int4 int4,
db(# int8 int8,
db(# smallint smallint,
db(# integer integer,
db(# bigint bigint);

db=# insert into demo_int values (2, 4, 8, 2, 4, 8)
;
INSERT 0 1
db=# select * from demo_int;
 int2 | int4 | int8 | smallint | integer | bigint
------+------+------+----------+---------+--------
    2 |    4 |    8 |          |         |
    2 |    4 |    8 |        2 |       4 |      8

定点数

numeric类型,这个用法如下,该类型是用在对于精确描述的数字上面,比如货币金额

numeric(precision, scale)
numeric(precision)
numeric

说明:
precision:精度,就是小数点的左右共有多少个数字
scale:刻度,就是小数点的右边有多少个数字
比如:
number(3,2):表示的就是2.12
number(3):表示的就可以是整数:123
number:表示的就不限制了:1233,432, 2212876

注意:
1.虽然该类型功能看着很牛逼,但是该值进行计算的时候,要比整数和浮点数慢得多
2.该类型同decimal是同效的,两个都是sql规范中要求的
3.其中插入的时候是有限制的,整数部分的位数一定要小于等于precision-scale。否则就会失败,不过小数分部插入时候不关心,但是显示的时候就有区别了

-- 创建表
create table demo_numeric(num numeric(2,3));

-- 插入 OK
insert into demo_numeric values(12.3);
insert into demo_numeric values(12.332);
insert into demo_numeric values(1.332123123123);

-- 插入 异常
insert into demo_numeric values(123.332);

4.该类型还支持NaN,但是使用的时候要添加上'',这样的一个引号才行

浮点数

浮点数这里有这么几种类型:
real
double precision
float(p)
float4
float8

real

这个跟float4是等价的

db=# create table demo_real(
db(# real real);
CREATE TABLE
db=# insert into demo_real values(12.323);
INSERT 0 1
db=# insert into demo_real values(17879234.323);
INSERT 0 1
db=# select * from demo_real;
     real
---------------
        12.323
 1.7879234e+07

double precision

这个跟float8是等价的

db=# create table demo_double(
db(# double double precision);
CREATE TABLE
db=# insert into demo_double values(123.123123);
INSERT 0 1
db=# insert into demo_double values(123.123123879987);
INSERT 0 1
db=# select * from demo_double;
      double
------------------
       123.123123
 123.123123879987

float

这个跟double precision是等价的

db=# create table demo_float(
db(# float float);
CREATE TABLE
db=# insert into demo_float values(123.3123);
INSERT 0 1
db=# insert into demo_float values(123.312808981233);
INSERT 0 1
  

db=# create table demo_float_n(
db(# float float4);
CREATE TABLE
db=# insert into demo_float_n values(1.333);
INSERT 0 1

发现上面三种类型都可以表示不定点的精度数(也叫浮点数),那么有什么区别呢
real:这个跟float(p)中的p在1~24是一样的,其实也有别名是:float4
double precision:这个是float(p)中的p为24~53,其实也有别名:float8

其中float(p)中的p不是表示小数点后面有多少个数,而是表示的当前这个小数可以用多少个bit表示,说是在pg中这个没有什么意义,其中用类型表示

db=# select pg_typeof(1.33333::float(1));
 pg_typeof
-----------
 real
(1 row)

db=# select pg_typeof(1.33333::float(24));
 pg_typeof
-----------
 real
(1 row)

db=# select pg_typeof(1.33333::float(25));
    pg_typeof
------------------
 double precision
(1 row)

db=# select pg_typeof(1.33333::float(53));
    pg_typeof
------------------
 double precision
(1 row)

db=# select pg_typeof(1.33333::float(54));
ERROR:  precision for type float must be less than 54 bits
LINE 1: select pg_typeof(1.3)

-- 其中float4就是real
db=# select pg_typeof(1.33333::float4);
 pg_typeof
-----------
 real
(1 row)
db=# select pg_typeof(1.33333::float8);
    pg_typeof
------------------
 double precision
(1 row)

其中默认的float,如果没有指定点数,则float表示的数就是double precision

注意:
浮点数如果插入的数据比表示的范围大,则会产生圆整错误

序列类型

这里有这么几种类型
smallserial:等效serial2
serial:等效serial4
bigserial:等效serial8
serial2
serial4
serial8

smallserialserialbigserial类型不是真正的类型,它们只是为了创建唯一标识符列而存在的方便符号(类似其它一些数据库中支持的AUTO_INCREMENT属性)。这个只是一个简化写法而已

db=# create table demo_serial(
db(# se serial,
db(# int int);
CREATE TABLE
db=# insert into demo_serial(int) values (22);
INSERT 0 1
db=# insert into demo_serial(int) values (22);
INSERT 0 1
db=# insert into demo_serial(int) values (22);
INSERT 0 1
db=# insert into demo_serial(int) values (22);
INSERT 0 1
db=# select * from demo_serial;
 se | int
----+-----
  1 |  22
  2 |  22
  3 |  22
  4 |  22
(4 rows)

货币类型

money类型存储固定小数精度的货币数字,在我们自己的金钱中,小数点后面是有两位的(元.角分)。小数的精度由数据库的lc_monetary设置决定。表中展示的范围假设有两个小数位。可接受的输入格式很多,包括整数和浮点数文字,以及常用的货币格式,如'$1,000.00'。 输出通常是最后一种形式,但和区域相关。

money,这个其实是专门用来表示货币的,是8字节,值的范围也是很大

名字 存储尺寸 描述 范围
money 8 bytes 货币额 -92233720368547758.08到+92233720368547758.07
db=# create table demo_money(
db(# money money);
CREATE TABLE
db=# insert into demo_money values(123.2312);
INSERT 0 1
db=# insert into demo_money values(123.23129808098);
INSERT 0 1
db=# insert into demo_money values(12376287348234.23);
INSERT 0 1
db=# select * from demo_money;
         money
------------------------
                $123.23
                $123.23
 $12,376,287,348,234.23
(3 rows)

也可以通过字符串的方式插入

db=# insert into demo_money values('$12.09');
INSERT 0 1
db=# select * from demo_money;
         money
------------------------
                $123.23
                $123.23
 $12,376,287,348,234.23
                 $12.09
(4 rows)

参考:

官网:http://postgres.cn/docs/11/datatype-numeric.html

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 203,324评论 5 476
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 85,303评论 2 381
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 150,192评论 0 337
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 54,555评论 1 273
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 63,569评论 5 365
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 48,566评论 1 281
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 37,927评论 3 395
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 36,583评论 0 257
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 40,827评论 1 297
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 35,590评论 2 320
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 37,669评论 1 329
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 33,365评论 4 318
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 38,941评论 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 29,928评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 31,159评论 1 259
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 42,880评论 2 349
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 42,399评论 2 342

推荐阅读更多精彩内容

  • 数字类型 MySQL 支持标准 SQL 中所有数据类型。所有的这些类型包括: 精确的数据类型:INTEGER,SM...
    幺鹿阅读 601评论 0 0
  • bit 整型 bit数据类型是整型,其值只能是0、1或空值。这种数据类型用于存储只有两种可能值的数据,如Yes 或...
    mank阅读 1,240评论 0 2
  • 本文基于MySQL5.6版本进行描述从大的方面来讲,MySQL的数据类型分为4种 数值类型 日期和时间 字符串类型...
    黑哥儿666阅读 741评论 0 0
  • 1、数值数据类型 备注:(1)numeric 不指定长度,可以保留的整数位和小数位很大;(2)numeric(6,...
    gisxiaowei阅读 2,400评论 0 0
  • 1、MySQL 数据类型 MySQL中定义数据字段的类型对你数据库的优化是非常重要的。 MySQL支持多种类型,大...
    garvin阅读 536评论 0 1