pgSQL笔记02-数据类型和运算符
【数据类型和运算符】
【5.1 数据类型介绍】
1. 整数类型 smallint 、int 、bigint
create table tmp1 (x smallint,y int,z bigint);
2.浮点数类型 real 和 double precision
create table tmp2 (x float(5),y real,z double precision);
3.任意精度类型 numeric
create table tmp3 (x numeric(5,1),y numeric(5,2));
insert into tmp3 values(9.12,9.15);
select * from tmp3;
4.日期与时间类型 time 、 date 、 timestamp 、 interval
◆ TIME 类型
create table tmp4 (t TIME);
insert into tmp4 values('10:05:05'),('23:23');
select * from tmp4;
insert into tmp4 values('101112');
select * from tmp4;
【插入当前时间】 (CURRENT_TIME),(NOW())
alter table tmp4 alter column t TYPE time without time zone;
delete from tmp4;
insert into tmp4 values(CURRENT_TIME),(NOW());
select * from tmp4;
◆ DATE 类型
create table tmp5(d DATE);
insert into tmp5 values('1998-08-08'),('19980808'),('20101010');
select * from tmp5;
delete from tmp5;
insert into tmp5 values('99-09-09'),('990909'),('000101'),('121212');
select * from tmp5;
delete from tmp5;
insert into tmp5 values(NOW());
select * from tmp5;
◆ TIMESTAMP类型
create table tmp7 (ts TIMESTAMP);
insert into tmp7 values('1996-02-02 02:02:02'),(NOW() );
select * from tmp7;
◆ 带时区的时间和日期
create table tmp7h (th time with time zone);
insert into tmp7h values('10:05:05 PST'),('10:05:05');
select * from tmp7h;
5.字符串类型 可以存储字符串、图片二进制、音频二进制。包括:char、varchar、text
(案例略)
6.二进制类型 BYTEA
create table tmp10(b BYTEA);
insert into tmp10 values (E'\\000');
select * from tmp10;
7.布尔类型 BOOLEAN
create table tmp11(b BOOLEAN );
insert into tmp11 values (TRUE),(FALSE),('y'),('no'),('0');
select * from tmp11;
8.数组类型★
create table tmp12(bt int[] );
insert into tmp12 values ('{{1,1,1},{2,2,2},{3,3,3}}');
select * from tmp12;
【如何选择数据类型】
为了优化存储,提高数据库性能,应该使用最精确的类型。
只记录时间——用TIME类型;只记录日期——用DATE类型;同时记录日期和时间——用TIMESTAMP类型。
CHAR是固定长度字符,VARCHAR是可变长度字符。CHAR比VARCHAR处理速度要快,但是浪费存储空间。
【常见运算符介绍】
◆运算符概述
算术运算符 + - * / %
比较运算符 > < = >= <= != IN BETWEEN...AND... GREATEST LEAST LIKE
逻辑运算符 NOT AND OR
位运算符 & | ~ ^ << >>
1.算术运算符
create table tmp14 (num INT);
insert into tmp14 values (64);
/* 【对num值进行加法和减法运算】 */
select num,num+10,num-10,num+5-3,num+36.5 from tmp14;
/* 【对num值进行乘法和除法运算】 */
select num,num*2,num/2,num/3,num%3 from tmp14;
(任兴:为毛我测试的num/3不是21.3333,而是21?版本不同的原因?!)
2. 比较运算符 ——结果总是t、f或者空值。
/* 【使用“=” 进行相等的判断】 */
select 1=0,'2'=2,2=2,'b'='b',(1+3)=(2+1),NULL=NULL;
总结:“=”符号不能用于空值NULL的判断。
/* 【使用“!=”和“<>” 进行不相等的判断】 */
select 'good'<>'god',1<>2,4!=4,5.5!=5,(1+3)!=(2+1),NULL<>NULL;
/* 【使用LEAST运算符进行大小判断】 */
select least(2,0),least(20.0,3.0,100.5),least('a','b','c'),least(10,NULL);
/* 【使用greatest运算符进行大小判断】 */
select greatest(2,0),greatest(20.0,3.0,100.5),greatest('a','b','c'),greatest(10,NULL);
/* 【IN、NOT IN、存在NULL值得情况】 */
select 2 in (1,2,5,8),3 in (1,2,5,9),2 not in (1,2,5,8),3 not in (1,2,5,9),NULL in (1,3,5),10 in (1,3,NULL);
注意:匹配一个字符的是一个下划线: _
/* 【LIKE】 */
select 'stud' like 'stud','stud' like 'stu_','stud' like '%d','stud' like 's_u_','s' like NULL;
3. 逻辑运算符 ——结果总是t、f或者空值。
/* 【NOT,对于NULL运算结果为空值】 */
select not '1',not 'y',not '0',not NULL,not 'n';
/* 【AND,对于包含NULL运算结果为空值】 */
select '1' and 'y','1' and '0','1' and NULL,'0' and NULL;
/* 【OR,对于包含NULL运算结果为空值】 */
select '1' or 't' or '0','1' or 'y','1' or NULL,'0' or NULL,NULL or NULL;
4. 位运算符 ——主要用于操作二进制的位串
/* 【位运算 ||】 */
select '1000100' || '1010110';
◆ 运算符的优先级