CAST 数据类型转换函数
布尔类型:
支持标准的boolean数据类型 只有TRUE FALSE两种状态,如果为unknown状态,则用NULL表示
数据类型:
smalint(2字节): oracle没有此类型,使用number 代替
int(4字节) bigint(8字节)
numeric(十进制精确类型):用户声明的精度,在ORACLE中叫做NUMBER
real、double、precision(浮点类型)
money(货币类型)
字符类型:varchar(n)、char(n)、test三种类型
二进制数据类型:只有一种bytea,他对应与mysql中BLOB与LONGBLOB,oracle中的raw 类型可以使用bytea取代
二进制字符串是一个字节序列。它和普通字符串的区别:
(1)完全可以存储字节零值,普通字符串不允许存储字节零值
(2)对二进制字符串处理,实际上处理字节;对字符串的处理,则取决于区域设置
位串类型:一串0和1的字符串,有bit(n)、bit varying(n)两种 其他数据库无此类型
日期和时间:date、time、timestamp。而time和timestamp 是否包括时区两种类型
日期输入:任何日期或者时间的文本输入需要由“日期/时间” 类型加单引号包围的字符串
如果DateStyle 参数默认为“MDY” ,则表示按照“月-日-年”解析
设置日期类型: set datestyle='YMD';
枚举类型:包含一系列有序静态值集合的数据类型,与MYSQL不同,使用之前需要使用ctreate type 创建类型,等于某些编程语言中的enum类型
每个枚举类型都是独立,不能与其他枚举类型混用;枚举类型的值大小写是敏感的。
eg:首先建立一个“week" 的枚举类型,并建立一张测试表:
create type week as ENUM('Sun','Mon','Thur','Fri','Sat');
create table duty(person text,weekday week);
insert into duty values('张三','Sun');
insert into duty values('李四','Mon');
insert into duty values('王二','Tues');
insert into duty values('赵五','Wed');
试查询一条数据:
select * from duty where weekday = 'Sun';
但如果输入的字符串不再枚举类型之间,就会报错:
select * from duty where weekday = 'Sun.';
在plsql中,可以使用\dT 查看枚举类型的定义:
\dT+ week
直接查询表pg_enum 可以查看枚举类型的定义;
select * from pg_enum;
复合类型:把已有的简单类型组合成用户自定义类型,例如C语言中结构体,类似于从一个表名字里选出一个字段,需要用圆括号括起来避免SQL解析器混淆
eg:
select person_info.name from author; (x)
select (person_info).name from author;
xml类型:存储XML数据类型。使用字符串类型也可以存储XML数据,但test类型不保证其中存储是合法XML数据。
Postgre 处理字符集的问题,在客户端与服务器端进行传递数据时,会自动进行字符集转换,如果两端字符集不一致,会自动进行字符集转换
JSON类型:存储JSON(JavaScript Object Notion)类型数据,也可以使用text、varchar等类型存储JSON类型{
JSON类型是把输出数据原封不动输入到数据库中,在存放前会对JSON类型进行语法检查,使用时需要重新解析数据;在JSON串中key之间多余空格、重复key值也会保留
JSONB类型在存放时就会把解析成二进制类型;并且支持在其上建立索引,JSONB在使用时性能更高
当一个JSON字符串转换成JSONB类型,JSON字符串数据类型实际被转换成PostgreSQL 数据库类型
range:存储范围快速搜索数据,用于表示范围
create table ipdb1(
ip_begin inet,
ip_end inet,
area text,
sp text);
对象标识符类型:oid 、regproc、regclass类型
伪类型:不能作为字段数据类型、但可以作为声明函s数参数或者结果类型
其他类型:一些不好分类的类型;例如UUID、pg_lsn类型