postgres 數據類型--數字類型


01, 數字類型

名字 存儲尺寸 描述 范圍
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

02,類型介紹

  smallint、integerbigint都是整數類型,存儲定范圍的整數,超出范圍將會報錯small int存儲2字節整數,字段定義時可寫成int2,integer存儲4節整數,支持的數值范圍比smallint大,宇段定義時可寫成int4,是最常用的整數類型bigint存儲8字節整數,支持的數值范圍integer大,字段定義時可寫成int8對於大多數使用整數類型的場景使integer就夠了,除非integer范圍不夠用的情況下才使用bigint

  例:

 

kingledb=> CREATE TABLE Kingle_Study_1 (a INTEGER,b int4);
CREATE TABLE
Time: 8.888 ms
kingledb=> \dt Kingle_Study_1
            List of relations
 Schema |      Name      | Type  | Owner
--------+----------------+-------+--------
 kingle | kingle_study_1 | table | kingle
(1 row)

kingledb=> \d kingle_study_1
           Table "kingle.kingle_study_1"
 Column |  Type   | Collation | Nullable | Default
--------+---------+-----------+----------+---------
 a      | integer |           |          |
 b      | integer |           |          |

 

  decimalnumeric是等效的,可以存儲指定精度的多位數據,比如帶小數位的數據,適用於要求計算准確的數值運

 

kingledb=> CREATE TABLE Kingle_Study_2 (a numeric(4,2),b decimal(5,3));
CREATE TABLE
Time: 1.801 ms
kingledb=> \d kingle_study_2
             Table "kingle.kingle_study_2"
 Column |     Type     | Collation | Nullable | Default
--------+--------------+-----------+----------+---------
 a      | numeric(4,2) |           |          |
 b      | numeric(5,3) |           |          |

kingledb=> insert  into   Kingle_Study_2 values (44.55,22.333);
INSERT 0 1
Time: 0.981 ms
kingledb=> select * from Kingle_Study_2
kingledb-> ;
   a   |   b
-------+--------
 44.55 | 22.333
(1 row)

Time: 0.622 ms

但要注意NUMERIC(precision, scale)  precision是指numeric數字里的全部位數scale指小數部分的數字位數,例如18.222precision5,而scale3; precision須為正整數,scale可以是0整數,由numeric類型上的算術運算相比整數類型性能低,因此,如果兩種數據類型都能滿足業務需求,從性能上考慮不建議使用numeric數據類型

  

kingledb=> insert  into   Kingle_Study_2 values (442.55,223.333);  --如果整數位比較大是不能插入成功的
ERROR:  numeric field overflow
DETAIL:  A field with precision 4, scale 2 must round to an absolute value less than 10^2.
Time: 0.645 ms
kingledb=> insert  into   Kingle_Study_2 values (44.2255,22.22333); --小數位多了 插入的數據也是只保留對應的位數
INSERT 0 1
Time: 0.952 ms
kingledb=> select * from Kingle_Study_2
;
   a   |   b
-------+--------
 44.55 | 22.333
 44.23 | 22.223
(2 rows)

Time: 0.380 ms

  realdoubleprecision指浮點數據類型,real支持4節,doubleprecision支持8節,浮點數據類型在實際生產案例的使用相比整數類型會少些

  smallserialserialbigserial類型是指自增serial類型,嚴格意義上不能稱之為種數據類型

03,數學上的一些數字類型操作

kingledb=> select 1+2 as a,2*3 as b,4/2 as c,8/3 as d;  --加減乘除
 a | b | c | d
---+---+---+---
 3 | 6 | 2 | 2
(1 row)
kingledb=> SELECT "mod"(1116,9);  --取模
 mod
-----
   0
(1 row)

Time: 0.654 ms
-- 返回大於或等於給出參數的最小整數
kingledb=> SELECT "ceil"(3.9999),"ceil"(-4.1111); ceil | ceil ------+------ 4 | -4 (1 row) Time: 0.470 ms
kingledb=> select round(10.23) as a,round(11.9) as b; --四舍五入
 a  | b
----+----
 10 | 12
(1 row)

Time: 0.800 ms
kingledb=> SELECT floor(3.6), floor(-3.6); --返回小於或等於給出參數的最大整數
 floor | floor
-------+-------
     3 |    -4
(1 row)

Time: 0.480 ms


官網: http://www.postgres.cn/docs/10/datatype-numeric.html#DATATYPE-INT
書籍學習來自:postgres 實戰


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM