zoukankan      html  css  js  c++  java
  • PosegreSQL基础回顾(第 8 章 数据类型)

    来源:http://www.postgres.cn/docs/11/

    8.1. 数字类型

    数字类型由2、4或8字节的整数以及4或8字节的浮点数和可选精度小数组成。表 8.2列出了所有可用类型。

    名字存储尺寸描述范围
    smallint 2字节 小范围整数 -32768 to +32767
    integer 4字节 整数的典型选择 -2147483648 to +2147483647
    bigint 8字节 大范围整数 -9223372036854775808 to +9223372036854775807
    decimal 可变 用户指定精度,精确 最高小数点前131072位,以及小数点后16383位
    numeric 可变 用户指定精度,精确 最高小数点前131072位,以及小数点后16383位
    real 4字节 可变精度,不精确 6位十进制精度
    double precision 8字节 可变精度,不精确 15位十进制精度
    smallserial 2字节 自动增加的小整数 1到32767
    serial 4字节 自动增加的整数 1到2147483647
    bigserial 8字节 自动增长的大整数

    1到9223372036854775807

    8.1.1. 整数类型

    常用的类型是integer,因为它提供了在范围、存储空间和性能之间的最佳平衡。一般只有在磁盘空间紧张的时候才使用 smallint类型。而只有在integer的范围不够的时候才使用bigint

    8.1.2. 任意精度数字

     一个numericprecision(精度)是整个数中有效位的总数,也就是小数点两边的位数。numericscale(刻度)是小数部分的数字位数,也就是小数点右边的部分。因此数字 23.5141 的精度为6而刻度为4。可以认为整数的刻度为零。

    numeric列的最大精度和最大比例都是可以配置的。

    除了普通的数字值之外,numeric类型允许特殊值NaN, 表示不是一个数字”。任何在 NaN上面的操作都生成另外一个NaN

     类型decimalnumeric是等效的。两种类型都是SQL标准的一部分。

    8.1.4. 序数类型

     smallserialserialbigserial类型不是真正的类型,它们只是为了创建唯一标识符列而存在的方便符号(类似其它一些数据库中支持的AUTO_INCREMENT属性)。

    8.3. 字符类型

    表 8.4. 字符类型

    名字描述
    character varying(n)varchar(n) 有限制的变长
    character(n)char(n) 定长,空格填充
    text 无限变长

    表 8.4显示了在PostgreSQL里可用的一般用途的字符类型。

    varchar(n)char(n)的概念分别是character varying(n)character(n)的别名。

    没有长度声明词的character等效于character(1)

    如果不带长度说明词使用character varying,那么该类型接受任何长度的串。后者是一个PostgreSQL的扩展。

     另外,PostgreSQL提供text类型,它可以存储任何长度的串。尽管类型text不是SQL标准,但是许多其它 SQL 数据库系统也有它。

    当把一个character值转换成其他 字符串类型之一时,拖尾的空白会被移除。请注意,在character varyingtext值里, 结尾的空白语意上有含义的,并且在使用模式匹配(如LIKE和正则表达式)时也会被考虑。

    8.5. 日期/时间类型

    PostgreSQL支持SQL中所有的日期和时间类型,如表 8.9所示。这些数据类型上可用的操作如第 9.9 节所述。日期根据公历来计算,即使对于该历法被引入之前的年份也一样(见第 B.5 节)。

    表 8.9. 日期/时间类型

    名字存储尺寸描述最小值最大值解析度
    timestamp [ (p) ] [ without time zone ] 8字节 包括日期和时间(无时区) 4713 BC 294276 AD 1微秒
    timestamp [ (p) ] with time zone 8字节 包括日期和时间,有时区 4713 BC 294276 AD 1微秒
    date 4字节 日期(没有一天中的时间) 4713 BC 5874897 AD 1日
    time [ (p) ] [ without time zone ] 8字节 一天中的时间(无日期) 00:00:00 24:00:00 1微秒
    time [ (p) ] with time zone 12字节 仅仅是一天中的时间(没有日期),带有时区 00:00:00+1459 24:00:00-1459 1微秒
    interval [ fields ] [ (p) ] 16字节 时间间隔 -178000000年 178000000年 1微秒

    注意

    SQL要求只写timestamp等效于timestamp without time zone,并且PostgreSQL鼓励这种行为

    timestamptz被接受为timestamp with time zone的一种简写,这是一种PostgreSQL的扩展。

    timetimestampinterval接受一个可选的精度值 p,这个精度值声明在秒域中小数点之后保留的位数。缺省情况下,在精度上没有明确的边界。p允许的范围是从 0 到 6。

    8.6. 布尔类型

    PostgreSQL提供标准的SQL类型boolean,参见表 8.19boolean可以有多个状态:true(真)”、false(假)”和第三种状态unknown(未知)”,未知状态由SQL空值表示。

    表 8.19. 布尔数据类型

    名字存储字节描述
    boolean 1字节 状态为真或假

    真”状态的有效文字值是:

    TRUE
    't'
    'true'
    'y'
    'yes'
    'on'
    '1'

    而对于假”状态,你可以使用下面这些值:

    FALSE
    'f'
    'false'
    'n'
    'no'
    'off'
    '0'

    前导或者末尾的空白将被忽略,并且大小写也无关紧要。使用TRUEFALSE这样的关键词比较好(SQL兼容)。

    例 8.2显示了使用字母tf输出boolean值的例子。

    例 8.2. 使用boolean类型

    CREATE TABLE test1 (a boolean, b text);
    INSERT INTO test1 VALUES (TRUE, 'sic est');
    INSERT INTO test1 VALUES (FALSE, 'non est');
    SELECT * FROM test1;
     a |    b
    ---+---------
     t | sic est
     f | non est
    
    SELECT * FROM test1 WHERE a;
     a |    b
    ---+---------
     t | sic est

    8.15. 数组

    PostgreSQL允许一个表中的列定义为变长多维数组。

    8.15.1. 数组类型的定义

    为了展示数组类型的使用,我们创建这样一个表:

    CREATE TABLE sal_emp (
        name            text,
        pay_by_quarter  integer[],
        schedule        text[][]
    );
    

    如上所示,一个数组数据类型可以通过在数组元素的数据类型名称后面加上方括号([])来命名。

    当前的实现也不会强制所声明的维度数。一个特定元素类型的数组全部被当作是相同的类型,而不论其尺寸或维度数。因此,在CREATE TABLE中声明数组的尺寸或维度数仅仅只是文档而已,它并不影响运行时的行为。

    另一种符合SQL标准的语法是使用关键词ARRAY,可以用来定义一维数组。pay_by_quarter可以这样定义:

        pay_by_quarter  integer ARRAY[4],
    

    或者,不指定数组尺寸:

        pay_by_quarter  integer ARRAY,
    

    但是和前面一样,PostgreSQL在任何情况下都不会强制尺寸限制。

    8.15.2. 数组值输入

    要把一个数组值写成一个文字常数,将元素值用花括号包围并用逗号分隔。

    格式如下:'{ val1 delim val2 delim ... }'   一个数组常量的例子是:'{{1,2,3},{4,5,6},{7,8,9}}'

    要设置一个数组常量的一个元素为NULL,在该元素值处写NULL(任何NULL的大写或小写变体都有效)。如果你需要一个真正的字符串值NULL”,你必须在它两边放上双引号。

    8.15.3. 访问数组

    数组下标写在方括号内。默认情况下,PostgreSQL为数组使用了一种从1开始的编号习惯,即一个具有n个元素的数组从array[1]开始,结束于array[n]

    更多

  • 相关阅读:
    前端html--position,旋转变换
    前端html--背景,文本,过渡效果属性
    前端html--margin,border,padding,盒模型
    前端html--css样式选择器
    前端html--超链接,表格,表单属性
    jQuery 中的事件绑定
    JavaScript简单了解
    private,protected,public和default的区别
    html基础和CSS选择器
    JSP小结
  • 原文地址:https://www.cnblogs.com/soulxj/p/12842579.html
Copyright © 2011-2022 走看看