1.数据类型
PG数据类型
create table t(
a1 boolean, --布尔类型,一个字节
a2 smallint, --2字节=int2;
a3 int,--4字节
a33 integer,--4字节
a333 int4 ,--4字节
a4 bigint, --8字节
a5 numeric ,--10进制精确累心
a55 numeric(m,n)=decimal(m,n)
a6 real, --浮点类型
a7 double, --浮点类型
a8 money, --8字节的货币类型
a9 char varing(10),==varchar(10)
a10 varchar(10), --最多可以存储1G的数据。mysql只能存储64K
a11 text, --文本类型,相当于mysql longtext;
a12 bitea, --二进制类型,对应mysql 里的BLOB/LONGBLOB
a13 bit(5), --位串类型
a14 bit varing(5),--位串类型 其他数据库没有。
a15 date,
a16 time, --包含时区和不包含时区。
a17 timestamp, --包含时区和不包含时区。
a18 enum('1','2','3'), --枚举类型
a19 point, --点
a20 line, --线
a21 lseg, --线段。
a22 path,--路径
a23 polygon, --多边形
a24 cycle, --圆
a25 [], --数组类型
a26 cidr, --网络地址类型
a27 inet,
a28 macaddr, --三种类型
a29 复合类型,
a30 xml,
a31 json,
a32 range,
a33 oid,
a34 regproc,
a35 regclass,
a36 any,
a37 anyarray,
a38 anyelement,
a39 cstring,
a40 internal,
a41 language_handler,
a42 record,
a43 trigger,
a44 void,
a45 opaque,
a46 uuid,
a47 pg_lsn
);
select 1,1.1412,'hello word';
select bit '111110011';
select int '1'+int '2';
select cast('5' as int),cast('2014-07-17' as date);
select '5'::int,'2014-07-17'::date;
布尔类型的值:TRUE,FALSE,'true','false','yes','no',null,'t','f','1','0';
表达式:IS TRUE;
表达式:IS NOT TRUE;
表达式:IS FALSE;
表达式:IS NOT FALSE;
表达式:IS UNKOWN;
表达式:IS NOT UNKOWN;
smallint 2字节, -2^15~ 2^15-1
int/integer 4字节 -2^31~2^31-1
bigint 8字节 -2^63~2^63-1
numeric/decimal 变长数字,无限制。
real 4 字节, 变精度,不精确,6位十进制数字
double precision 8 字节,变精度,不精确,15位十进制数字精度。
serial 4字节,自增整数。1~2^31-1
bigserial 8字节 大范围自增整数。1~2^63-1
numeric/numeric(m,n)/numeric(m) /decimal --精确 类型。
numeric表示任意精度。
create table t(id serial); 自增序列。
select '12.32'::money; 输出格式和 lc_money 有关。
show lc_monetary; --查看钱的输出格式。
set lc_monetary=en_US.UTF-8;
2.操作符
+
-
* 乘号
/ 除
% 模(求余数)
^ 幂指数。
|/ 平方根 |/36=6
||/ 立方根 ||/8=2
! 阶乘 5! =120
!! 阶乘 !!5 =120
@ 绝对值 @-5.0=5
& 二进制and; 31&15=15
| 二进制or ; 31|15=31
# 二进制XOR ; 31#15=16
~ 二进制not; ~1=-2
<< 二进制左移; 1<<8 =256
>> 二进制右移; 16>>3=2
3.数学函数
abs(-23.7)=23.7 --绝对值:
cbrt(8)=2 --立方根:
ceil(-38.8)=-38 ,ceiling(-38.8)=-38 --不小于参数的最小整数:
degree(1)=57.2957795 --把弧度转化为角度:
exp(1)=2.7182818 --自然指数:
floor(-42.8)=-43,floor(42.8)=42 --不大于参数的最大值:
ln(2.71828)=0.9999993273472820 --自然对数:
log(1000)=3 --以10为底的对数:
log(2.0,32.0)=5 --以b为底数的对数:log(b,x),
mod(7,3)=1 --y/x的余数:mod(y,x),
pi()=3.14159265358979 --pi常量:
power(2.0,3.0)=8 --a的b次幂:
radians(45.0)=0.785398163397448 --角度转换为弧度:
random() --随机一个小数。0.0~1.0之间的随机数:
round(36.5)=37 --四舍五入到最接近的整数:
round(36.5252,2)=36.53 --四舍五入到n位小数:
setseed(0.54823)=117314959 --为随后的random()调用设置种子(0~1之间) :
sign(-8.4)=-1 --参数的符号:(-1,0,1),
sqrt(2)=1.4142136623731 --平方根:
trunc(42.8)=42 --截断,向零靠近:
trunc(42.4382,2)=42.43 --截断为n位小数:
acos(1)=0 --反余玄
acos(-1)=3.14159265358979
asin(0)=0 --反正玄
asin(1)*2=3.14159265358979 --反余玄
atan(1)=0.788398163397448 --反正切
atan2(1,1)=0.788398163397448 --x/y的反正切。
cos(pi())=-1 ,cos(0)=1 --余玄
cot(0)=Infinity --余切
sin(0)=0,sin(pi()/2)=1 --正玄
tan(pi()/4)=1 --正切
character varing(n)
varchar(n) pg变长,最大1G,oracle中varchar2(n) 最多4000,mysql varchar(n) 最多64K。
character(n),char(n) 定长,最大1G。
text :变长,无长度限制,与mysql中的longtext 类似。
4.总结
postgresql的数据类型非常丰富,功能非常强大。