数据类型
最后更新于:2022-04-02 03:57:45
[TOC]
## 数值类型
| 名字 | 存储长度 | 描述 | 范围 |
| --- | --- | --- | --- |
| smallint | 2 字节 | 小范围整数 | \-32768 到 +32767 |
| integer | 4 字节 | 常用的整数 | \-2147483648 到 +2147483647 |
| bigint | 8 字节 | 大范围整数 | \-9223372036854775808 到 +9223372036854775807 |
| numeric | 可变长 | 用户指定的精度,精确 |小数点前 131072 位;小数点后 16383 位 |
## 货币类型
| 名字 | 存储容量 | 描述 | 范围 |
| --- | --- | --- | --- |
| money | 8 字节 | 货币金额 | \-92233720368547758.08 到 +92233720368547758.07 |
## 字符类型
| 名字 | 描述 |
| --- | --- |
| varchar(n) | 变长,有长度限制 |
| char(n) | f 定长,不足补空白 |
| text |变长,无长度限制 |
## 日期/时间类型
## 布尔类型
| 名称 | 存储格式 | 描述 |
| --- | --- | --- |
| boolean | 1 字节 | true/false |
## 网络地址类型
| 名字 | 存储空间 | 描述 |
| --- | --- | --- |
| cidr | 7 或 19 字节 | IPv4 或 IPv6 网络 |
| inet | 7 或 19 字节 | IPv4 或 IPv6 主机和网络 |
| macaddr | 6 字节 | MAC 地址 |
## 数组类型
### 声明数组
```
CREATE TABLE sal_emp (
name text,
pay_by_quarter integer[],
schedule text[][]
);
```
### 插入数组
```
INSERT INTO sal_emp
VALUES ('Bill',
'{10000, 10000, 10000, 10000}',
'{{"meeting", "lunch"}, {"training", "presentation"}}');
```
### 访问数组
`SELECT name FROM sal_emp WHERE pay_by_quarter[1] <> pay_by_quarter[2];
`
### 数组中检索
```
SELECT * FROM sal_emp WHERE pay_by_quarter[1] = 10000 OR
pay_by_quarter[2] = 10000 OR
pay_by_quarter[3] = 10000 OR
pay_by_quarter[4] = 10000;
//or
SELECT * FROM sal_emp WHERE 10000 = ALL (pay_by_quarter);
```
### 修改数组
```
UPDATE sal_emp SET pay_by_quarter = '{25000,25000,27000,27000}'
WHERE name = 'Carol';
//or
UPDATE sal_emp SET pay_by_quarter = ARRAY[25000,25000,27000,27000]
WHERE name = 'Carol';
```
### 复合类型
```
CREATE TYPE inventory_item AS (
name text,
supplier_id integer,
price numeric
);
CREATE TABLE on_hand (
item inventory_item,
count integer
);
INSERT INTO on_hand VALUES (ROW('fuzzy dice', 42, 1.99), 1000);
```
避免获取操作与 表字段一样,用括号进行区别
```
SELECT item.name FROM on_hand WHERE item.price > 9.99;
//改
SELECT (item).name FROM on_hand WHERE (item).price > 9.99;
//ro
SELECT (on_hand.item).name FROM on_hand WHERE (on_hand.item).price > 9.99;
```
';