數(shù)據(jù)類型
PostgreSQL支持多種數(shù)據(jù)類型:主要有
整數(shù)類型输拇,浮點(diǎn)數(shù)類型摘符,任意精度,日期與時(shí)間類型策吠,字符串類型逛裤,二進(jìn)制類型,布爾類型猴抹,數(shù)組類型等
整數(shù)類型
# SMALLINT 小范圍整數(shù) 2個(gè)字節(jié) 取值范圍:-32768 ~ 32767
# INT(INTEGER) 普通大小的整數(shù) 4個(gè)字節(jié) 取值范圍:-2147483648 ~ 2147483647
# BIGINT 大整數(shù) 8個(gè)字節(jié) 取值范圍:-9223372036854775808 ~ 9223372036854775807
# CREATE TABLE tmp1 (x SMALLINT,y INT,z BIGINT);
浮點(diǎn)數(shù)類型
PostgreSQL也支持SQL標(biāo)準(zhǔn)表示法带族,float和float(p),選取REAL類型時(shí)候蟀给,PostgreSQL接收float(1)到float(24)蝙砌,在選取DOUBLE PRECISION的時(shí)候,接收float(25)到float(53),在允許范圍之外的p值坤溃,將會(huì)導(dǎo)致錯(cuò)誤拍霜,沒有聲明精度的float將被當(dāng)作DOUBLE PRECISION。
# REAL 6位十進(jìn)制數(shù)字精度 4個(gè)字節(jié)
# DOUBLE PRECISION 15位十進(jìn)制數(shù)字精度 8個(gè)字節(jié)
# CREATE TABLE tmp2 (X FLOAT(5),Y REAL,Z DOUBLE PRECISION);
# Infinity表示正無窮大薪介,-Infinity表示負(fù)無窮大祠饺,NaN表示不是一個(gè)數(shù)字
任意精度類型
NUMERIC表示數(shù)值是任意精度的類型,使用NUMERIC(M,N)來表示汁政,其中M稱為精度道偷,表示總的位數(shù),N稱為標(biāo)度记劈,表示小數(shù)的位數(shù)勺鸦,例如:123.456中,精度為6目木,標(biāo)度為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=>
日期與時(shí)間類型
TIME,DATE,TIMESTAMP,INTERVAL,指定類型遇到不合法的值時(shí)换途,系統(tǒng)將“零”值插入到數(shù)據(jù)庫中
# TIME 只用于一日內(nèi)時(shí)間(默認(rèn)不帶時(shí)區(qū)) 8字節(jié) HH:MM:SS
# DATE 只用于日期 4字節(jié) ‘YYYY-MM-DD'
# TIMESTAMP 日期和時(shí)間(默認(rèn)不帶時(shí)區(qū)) 8字節(jié) ’YYYY-MM-DD HH-MM-SS'
# time 類型
# CREATE TABLE tmp4 (t time);
# ~ t | time without time zone | 默認(rèn)不帶時(shí)區(qū)
# 插入數(shù)據(jù)
# 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
# 修改帶時(shí)區(qū)的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年
# 清空表數(shù)據(jù)
# 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) 固定長度非二進(jìn)制字符串,不足補(bǔ)空白
# VARCHAR(n)/CHARACTER VARYING(n) 變長非二進(jìn)制字符串军拟,有長度限制
# TEXT 變長非二進(jìn)制字符串剃执,無長度限制
二進(jìn)制類型
# BYTEA 類型,存儲(chǔ)空間為4字節(jié)
布爾類型
# BOOLEAN TRUE FALSE
數(shù)組類型
允許將字段定義成定長或變長的一維或多維數(shù)組懈息,數(shù)組類型可以是任何基本類型或用戶定義類型
# 聲明數(shù)組
# numb INT[], 一維數(shù)組
# xuehao TEXT[] [], 二維數(shù)組
# zuoye TEXT[4] [4], 二維數(shù)組肾档,且聲明數(shù)組長度
# CREATE TABLE tmp7 (numb INT[],xuehao TEXT[] [], zuoye TEXT[4] [4]);
# INSERT INTO tmp7 VALUES ('{{1,1,1},{2,2,2},{3,3,3}}');
運(yùn)算符
算術(shù)運(yùn)算符
# +
# -
# *
# / 除運(yùn)算,返回商
# % 求余辫继,模運(yùn)算怒见,返回余數(shù)
# 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;
比較運(yùn)算符
# =
# <> (!=) 不等于
# <=
# >=
# >
# <
# LEAST 在有兩個(gè)或多個(gè)參數(shù)時(shí),返回最小值 格式: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 當(dāng)有兩個(gè)或多個(gè)參數(shù)時(shí)低千,返回最大值 格式: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 判斷一個(gè)值是否落在兩個(gè)值之間 格式: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 判斷一個(gè)值是否是IN列表中的任意一個(gè)值 格式:expr IN (值1,值2难审,....值n)
# SELECT 2 IN (1,2,5,7), 3 IN (1,4,5,7);
# LIKE 通配符匹配 %匹配任何數(shù)目的字符 _只能匹配一個(gè)字符
# SELECT 'stud' LIKE 'stud','stud' LIKE 'stu_','stud' LIKE '%d','stud' LIKE 't___','s'LIKE NULL;
邏輯運(yùn)算符
# 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;
位運(yùn)算符
# || 連接
# & 位與
# | 位或
# # 位亦或
# ~ 位非
# << 位左移
# >> 位右移
# 連接運(yùn)算:‘10001’||‘011’ 結(jié)果為10001011
# 位與運(yùn)算:‘10001’&‘01101’結(jié)果00001
# 位或運(yùn)算:‘10001’|‘01101’結(jié)果為11101
# 位異或運(yùn)算:‘10001’#‘01101’結(jié)果為11100
# 位非運(yùn)算:~'10001' 結(jié)果為01110
# 位左移運(yùn)算:‘10001’<<3 結(jié)果為01000
# 位右移運(yùn)算:‘10001’>>2結(jié)果為00100