PostgreSQL的数据类型和运算符

数据类型

PostgreSQL支持多种数据类型:主要有
整数类型,浮点数类型,任意精度,日期与时间类型,字符串类型,二进制类型,布尔类型,数组类型等

整数类型
# SMALLINT   小范围整数    2个字节    取值范围:-32768 ~ 32767
# INT(INTEGER)     普通大小的整数     4个字节    取值范围:-2147483648 ~ 2147483647
# BIGINT     大整数     8个字节    取值范围:-9223372036854775808 ~ 9223372036854775807
# CREATE TABLE tmp1 (x SMALLINT,y INT,z BIGINT);
浮点数类型

PostgreSQL也支持SQL标准表示法,float和float(p),选取REAL类型时候,PostgreSQL接收float(1)到float(24),在选取DOUBLE PRECISION的时候,接收float(25)到float(53),在允许范围之外的p值,将会导致错误,没有声明精度的float将被当作DOUBLE PRECISION。
# REAL 6位十进制数字精度 4个字节
# DOUBLE PRECISION 15位十进制数字精度 8个字节
# CREATE TABLE tmp2 (X FLOAT(5),Y REAL,Z DOUBLE PRECISION);
# Infinity表示正无穷大,-Infinity表示负无穷大,NaN表示不是一个数字

任意精度类型

NUMERIC表示数值是任意精度的类型,使用NUMERIC(M,N)来表示,其中M称为精度,表示总的位数,N称为标度,表示小数的位数,例如:123.456中,精度为6,标度为3
# company=> CREATE TABLE tmp3 (x NUMERIC (5,1),y NUMERIC (5,2));
# company=> INSERT INTO tmp3 VALUES(9.12,9.15);
# company=> SELECT * FROM tmp3;
# x | y
# —–+——
# 9.1 | 9.15
# (1 行记录)
# company=>

日期与时间类型

TIME,DATE,TIMESTAMP,INTERVAL,指定类型遇到不合法的值时,系统将“零”值插入到数据库中
# TIME 只用于一日内时间(默认不带时区) 8字节 HH:MM:SS
# DATE 只用于日期 4字节 ‘YYYY-MM-DD’
# TIMESTAMP 日期和时间(默认不带时区) 8字节 ’YYYY-MM-DD HH-MM-SS’
# time 类型
# CREATE TABLE tmp4 (t time);
# ~ t | time without time zone | 默认不带时区
# 插入数据
# INSERT INTO tmp4 VALUES(‘150111’);
# INSERT INTO tmp4 VALUES(’15:02:33′);
# INSERT INTO tmp4 VALUES(’15:10′);
# SELECT * FROM tmp4;
# 15:01:11
# 15:02:33
# 15:10:00
# 修改带时区的time类型
# ALTER TABLE tmp4 ALTER COLUMN t TYPE time with time zone;
# 15:10:32.031032+08
# 15:10:32.031032+08
# DATE类型
# CREATE TABLE tmp5 ( d DATE);
# INSERT INTO tmp5 VALUES (‘901127’),(‘111127’),(‘2017-11-21’);
# 0069表示20002069年,7099表示19701999年
# 清空表数据
# DELETE FROM tmp5;
# TIMESTAMP类型
# CREATE TABLE tmp6 (t TIMESTAMP)
# INSERT INTO tmp6 VALUES (‘801121 121212’);
# 1980-11-21 12:12:12

字符串类型
# CHAR(n)/CHARACTER(n)   固定长度非二进制字符串,不足补空白
# VARCHAR(n)/CHARACTER VARYING(n)   变长非二进制字符串,有长度限制
# TEXT  变长非二进制字符串,无长度限制
二进制类型
# BYTEA 类型,存储空间为4字节
布尔类型
# BOOLEAN   TRUE  FALSE
数组类型

允许将字段定义成定长或变长的一维或多维数组,数组类型可以是任何基本类型或用户定义类型
# 声明数组
# numb INT[], 一维数组
# xuehao TEXT[] [], 二维数组
# zuoye TEXT[4] [4], 二维数组,且声明数组长度
# CREATE TABLE tmp7 (numb INT[],xuehao TEXT[] [], zuoye TEXT[4] [4]);
# INSERT INTO tmp7 VALUES (‘{{1,1,1},{2,2,2},{3,3,3}}’);

运算符

算术运算符
# +    
# -
# *
# /      除运算,返回商
# %     求余,模运算,返回余数
# CREATE TABLE tmp14 (num INT);
# INSERT INTO tmp14 VALUES(64);
# SELECT num,num+10,num-20,num+19-2,num%7,num/7 FROM tmp14;
比较运算符
# =
# <> (!=)        不等于
# <=
# >=
# >
# <
# LEAST        在有两个或多个参数时,返回最小值    格式:LEAST(值1,值2,值3,....值n)
# SELECT LEAST(2,0),LEAST(20.1,0.3,100.5),LEAST('a','A','C','b','D','c'),LEAST(10,NULL);
# GREATEST      当有两个或多个参数时,返回最大值     格式:GREATEST(值1,值2,值3,....值n)
# SELECT GREATEST(2,0),GREATEST(20.1,0.3,100.5),GREATEST('a','A','C','b','D','c'),GREATEST(10,NULL);
# BETWEEN AND       判断一个值是否落在两个值之间    格式:expr BETWEEN min AND max    假如expr大于或等于min且expr小于或等于max,则BETWEEN的返回值为t,否则返回f
# SELECT 4 BETWEEN 2 AND 5,4 BETWEEN 4 AND 6,12 BETWEEN 9 AND 10;
# IN                              判断一个值是否是IN列表中的任意一个值  格式:expr IN (值1,值2,....值n)
# SELECT 2 IN (1,2,5,7), 3 IN (1,4,5,7);
# LIKE                         通配符匹配    %匹配任何数目的字符    _只能匹配一个字符
# SELECT 'stud' LIKE 'stud','stud' LIKE 'stu_','stud' LIKE '%d','stud' LIKE 't___','s'LIKE NULL;
逻辑运算符
# NOT    逻辑非
# AND    逻辑与
# OR      逻辑或
# SELECT NOT '1',NOT 'Y',NOT '0',NOT NULL,NOT 'n';
# SELECT '1' AND 'Y','1' AND '0', '1' AND NULL , '0' AND NULL;
位运算符
# ||        连接
# &        位与
# |          位或
# #         位亦或
# ~         位非
# <<       位左移
# >>       位右移
# 连接运算:‘10001’||‘011’  结果为10001011
# 位与运算:‘10001’&‘01101’结果00001
# 位或运算:‘10001’|‘01101’结果为11101
# 位异或运算:‘10001’#‘01101’结果为11100
# 位非运算:~'10001' 结果为01110
# 位左移运算:‘10001’<<3 结果为01000
# 位右移运算:‘10001’>>2结果为00100

《PostgreSQL的数据类型和运算符》

    原文作者:词穷又词贫
    原文地址: https://www.jianshu.com/p/587a0e4a9543
    本文转自网络文章,转载此文章仅为分享知识,如有侵权,请联系博主进行删除。
点赞