数据类型

最后更新于: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; ```
';