当前位置:主页 > 服务器配置 >正文

光衣美女-PostgreSQL教程(四):数据类型详解

2021-10-22 796 服务器配置

一、数值类型

下面是PostgreSQL所支持的数值类型的列表和简单说明:

1.整数类型:

类型smallint、integer和bigint存储各种范围的全部是数字的数,也就是没有小数部分的数字。试图存储超出范围以外的数值将导致一个错误。常用的类型是integer,因为它提供了在范围、存储空间和性能之间的最佳平衡。一般只有在磁盘空间紧张的时候才使用smallint。而只有在integer的范围不够的时候才使用bigint,因为前者(integer)绝对快得多。

2.任意精度数值:

类型numeric可以存储最多1000位精度的数字并且准确地进行计算。因此非常适合用于货币金额和其它要求计算准确的数量。不过,numeric类型上的算术运算比整数类型或者浮点数类型要慢很多。

numeric光衣美女的最大精度和最大比例都是可以配置的。要声明一个类型为numeric的光衣美女,你可以用下面的语法:

光衣美女如下:

NUMERIC(precision,scale)

比如数字23.5141的精度为6,而刻度为4。

在目前的PostgreSQL版本中,decimal和numeric是等效的。

3.浮点数类型:

数据类型real和double是不准确的、牺牲精度的数字类型。不准确意味着一些数值不能准确地转换成内部格式并且是以近似的形式存储的,因此存储后再把数据打印出来可能显示一些缺失。

4.Serial(序号)类型:

serial和bigserial类型不是真正的类型,只是为在表中设置唯一标识做的概念上的便利。

光衣美女如下:

CREATETABLEtablename(

colnameSERIAL

);

等价于

光衣美女如下:

CREATESEQUENCEtablename_colname_seq;

CREATETABLEtablename(

colnameintegerDEFAULTnextval('tablename_colname_seq')NOTNULL

);

这样,我们就创建了一个整数光衣美女并且把它的缺省数值安排为从一个序列发生器取值。应用了一个NOTNULL约束以确保空值不会******入。在大多数情况下你可能还希望附加一个UNIQUE或者PRIMARYKEY约束避免意外地插入重复的数值,但这个不是自动发生的。因此,如果你希望一个序列光衣美女有一个唯一约束或者一个主键,那么你现在必须声明,就像其它数据类型一样。

还需要另外说明的是,一个serial类型创建的序列在其所属光衣美女被删除时,该序列也将被自动删除,但是其它情况下是不会被删除的。因此,如果你想用同一个序列发生器同时给几个光衣美女提供数据,那么就应该以独立对象的方式创建该序列发生器。

二、字符类型:

幸运飞艇人工计划在线网   下面是PostgreSQL所支持的字符类型的列表和简单说明:

SQL定义了两种基本的字符类型,varchar(n)和char(n),这里的n是一个正整数。两种类型都可以存储最多n个字符长的字串,试图存储更长的字串到这些类型的光衣美女里会产生一个错误,除非超出长度的字符都是空白,这种情况下该字串将被截断为最大长度。如果没有长度声明,char等于char(1),而varchar则可以接受任何长度的字串。

光衣美女如下:

MyTest=>CREATETABLEtesttable(first_colvarchar(2));

CREATETABLE

MyTest=>INSERTINTOtesttableVALUES('333');  --插入字符串的长度,超过其光衣美女定义的长度,因此报错。

ERROR: valuetoolongfortypecharactervarying(2)

--插入字符串中,超出光衣美女定义长度的部分是空格,因此可以插入,但是空白符被截断。

MyTest=>INSERTINTOtesttableVALUES('33');

INSERT01

MyTest=>SELECT*FROMtesttable;

first_col

-----------

33

(1row)

这里需要注意的是,如果是将数值转换成char(n)或者varchar(n),那么超长的数值将被截断成n个字符,而不会抛出错误。

光衣美女如下:

MyTest=>select1234::varchar(2);

varchar

---------

12

(1row)

最后需要提示的是,这三种类型之间没有性能差别,只不过是在使用char类型时增加了存储尺寸。虽然在某些其它的数据库系统里,char(n)有一定的性能优势,但在PostgreSQL里没有。在大多数情况下,应该使用text或者varchar。

三、日期/时间类型:

下面是PostgreSQL所支持的日期/时间类型的列表和简单说明:

1.日期/时间输入:

任何日期或者时间的文本输入均需要由单引号包围,就象一个文本字符串一样。

1).日期:

幸运飞艇人工计划在线网   以下为合法的日期格式列表:

2).时间:

以下为合法的时间格式列表:

3).时间戳:

时间戳类型的有效输入由一个日期和时间的联接组成,后面跟着一个可选的时区。因此,1999-01-0804:05:06和1999-01-0804:05:06-8:00都是有效的数值。

2.示例:

1).在插入数据之前先查看datestyle系统变量的值:

光衣美女如下:

MyTest=>showdatestyle;

DateStyle

-----------

ISO,YMD

(1row)

2).创建包含日期、时间和时间戳类型的示例表:

光衣美女如下:

MyTest=>CREATETABLEtesttable(idinteger,date_coldate,time_coltime,timestamp_coltimestamp);

CREATETABLE

3).插入数据:

光衣美女如下:

MyTest=>INSERTINTOtesttable(id,date_col)VALUES(1,DATE'01/02/03'); --datestyle为YMD

INSERT01

MyTest=>SELECTid,date_colFROMtesttable;

id  | date_col

----+------------

1 |2001-02-03

(1row)

MyTest=>setdatestyle=MDY;

SET

MyTest=>INSERTINTOtesttable(id,date_col)VALUES(2,DATE'01/02/03'); --datestyle为MDY

INSERT01

MyTest=>SELECTid,date_colFROMtesttable;

id  | date_col

----+------------

1 |2001-02-03

幸运飞艇人工计划在线网     2 |2003-01-02

MyTest=>INSERTINTOtesttable(id,time_col)VALUES(3,TIME'10:20:00'); --插入时间。

INSERT01

MyTest=>SELECTid,time_colFROMtesttableWHEREtime_colISNOTNULL;

id  |time_col

----+----------

3  |10:20:00

(1row)

MyTest=>INSERTINTOtesttable(id,timestamp_col)VALUES(4,DATE'01/02/03');

INSERT01

MyTest=>INSERTINTOtesttable(id,timestamp_col)VALUES(5,TIMESTAMP'01/02/0310:20:00');

INSERT01

MyTest=>SELECTid,timestamp_colFROMtesttableWHEREtimestamp_colISNOTNULL;

id  |   timestamp_col

----+---------------------

4 |2003-01-0200:00:00

5 |2003-01-0210:20:00

(2rows)

四、布尔类型:

PostgreSQL支持标准的SQLboolean数据类型。boolean只能有两个状态之一:真(True)或假(False)。该类型占用1个字节。

"真"值的有效文本值是:

光衣美女如下:

TRUE

't'

'true'

'y'

'yes'

'1'

而对于"假"而言,你可以使用下面这些:

光衣美女如下:

FALSE

'f'

'false'

'n'

'no'

'0'

见如下使用方式:

光衣美女如下:

MyTest=>CREATETABLEtesttable(aboolean,btext);

CREATETABLE

MyTest=>INSERTINTOtesttableVALUES(TRUE,'sicest');

INSERT01

MyTest=>INSERTINTOtesttableVALUES(FALSE,'nonest');

INSERT01

MyTest=>SELECT*FROMtesttable;

a |   b

---+---------

t |sicest

f |nonest

(2rows)

MyTest=>SELECT*FROMtesttableWHEREa;

a |   b

---+---------

t |sicest

(1row)

MyTest=>SELECT*FROMtesttableWHEREa=true;

a |   b

---+---------

t |sicest

(1row)

五、位串类型:

位串就是一串1和0的字串。它们可以用于存储和视觉化位掩码。我们有两种类型的SQL位类型:bit(n)和bitvarying(n);这里的n是一个正整数。bit类型的数据必须准确匹配长度n;试图存储短些或者长一些的数据都是错误的。类型bitvarying数据是最长n的变长类型;更长的串会被拒绝。写一个没有长度的bit等效于bit(1),没有长度的bitvarying相当于没有长度限制。

针对该类型,最后需要提醒的是,如果我们明确地把一个位串值转换成bit(n),那么它的右边将被截断或者在右边补齐零,直到刚好n位,而不会抛出任何错误。类似地,如果我们明确地把一个位串数值转换成bitvarying(n),如果它超过n位,那么它的右边将被截断。见如下具体使用方式:

光衣美女如下:

MyTest=>CREATETABLEtesttable(abit(3),bbitvarying(5));

CREATETABLE

MyTest=>INSERTINTOtesttableVALUES(B'101',B'00');

INSERT01

MyTest=>INSERTINTOtesttableVALUES(B'10',B'101');

ERROR: bitstringlength2doesnotmatchtypebit(3)

MyTest=>INSERTINTOtesttableVALUES(B'10'::bit(3),B'101');

INSERT01

MyTest=>SELECT*FROMtesttable;

a | b

-----+-----

101|00

100|101

(2rows)

MyTest=>SELECTB'11'::bit(3);

bit

-----

110

(1row)

六、数组:

1.数组类型声明:

1).创建光衣美女含有数组类型的表。

光衣美女如下:

CREATETABLEsal_emp(

name           text,

pay_by_quarter integer[]--还可以定义为integer[4]或integerARRAY[4]

);

2).插入数组数据:

光衣美女如下:

MyTest=#INSERTINTOsal_empVALUES('Bill','{,,,}');

INSERT01

MyTest=#INSERTINTOsal_empVALUES('Carol',ARRAY[,,,]);

INSERT01

MyTest=#SELECT*FROMsal_emp;

name |     pay_by_quarter

--------+---------------------------

Bill    |{,,,}

Carol |{,,,}

(2rows)

2.访问数组:

和其他语言一样,PostgreSQL中数组也是通过下标数字(写在方括弧内)的方式进行访问,只是PostgreSQL中数组元素的下标是从1开始n结束。

光衣美女如下:

MyTest=#SELECTpay_by_quarter[3]FROMsal_emp;

pay_by_quarter

----------------

(2rows)

MyTest=#SELECTnameFROMsal_empWHEREpay_by_quarter[1]<>pay_by_quarter[2];

name

------

Bill

Carol

(2rows)

PostgreSQL中还提供了访问数组范围的功能,即ARRAY[脚标下界:脚标上界]。

光衣美女如下:

MyTest=#SELECTname,pay_by_quarter[1:3]FROMsal_emp;

name |  pay_by_quarter

--------+---------------------

Bill    |{,,}

Carol |{,,}

(2rows)

3.修改数组:

1).代替全部数组值:

光衣美女如下:

--UPDATEsal_empSETpay_by_quarter=ARRAY[,,,]WHEREname='Carol';也可以。

MyTest=#UPDATEsal_empSETpay_by_quarter='{,,,}'WHEREname='Carol';

UPDATE1

MyTest=#SELECT*FROMsal_emp;

name |     pay_by_quarter

--------+---------------------------

Bill    |{,,,}

Carol |{,,,}

(2rows)

2).更新数组中某一元素:

光衣美女如下:

MyTest=#UPDATEsal_empSETpay_by_quarter[4]=WHEREname='Bill';

UPDATE1

MyTest=#SELECT*FROMsal_emp;

name |     pay_by_quarter

--------+---------------------------

Carol |{,,,}

Bill    |{,,,}

(2rows)

3).更新数组某一范围的元素:

光衣美女如下:

MyTest=#UPDATEsal_empSETpay_by_quarter[1:2]='{,}'WHEREname='Carol';

UPDATE1

MyTest=#SELECT*FROMsal_emp;

name |     pay_by_quarter

--------+---------------------------

Bill    |{,,,}

Carol |{,,,}

(2rows)

4).直接赋值扩大数组:

光衣美女如下:

MyTest=#UPDATEsal_empSETpay_by_quarter[5]=WHEREname='Bill';

UPDATE1

MyTest=#SELECT*FROMsal_emp;

name |        pay_by_quarter

--------+---------------------------------

Carol |{,,,}

Bill    |{,,,,}

(2rows)

4.在数组中检索:

1).最简单直接的方法:

光衣美女如下:

SELECT*FROMsal_empWHEREpay_by_quarter[1]=OR

pay_by_quarter[2]=OR

pay_by_quarter[3]=OR

pay_by_quarter[4]=;

2).更加有效的方法:

光衣美女如下:

SELECT*FROMsal_empWHERE=ANY(pay_by_quarter);--数组元素中有任何一个等于,where条件将成立。

SELECT*FROMsal_empWHERE=ALL(pay_by_quarter);--只有当数组中所有的元素都等于时,where条件才成立。

七、复合类型:

PostgreSQL中复合类型有些类似于C语言中的结构体,也可以被视为Oracle中的记录类型,但是还是感觉复合类型这个命名比较贴切。它实际上只是一个光衣美女名和它们的数据类型的列表。PostgreSQL允许像简单数据类型那样使用复合类型。比如,表光衣美女可以声明为一个复合类型。

1.声明复合类型:

下面是两个简单的声明示例:

光衣美女如下:

CREATETYPEcomplexAS(

rdouble,

idouble

);

CREATETYPEinventory_itemAS(

name          text,

supplier_id  integer,

price           numeric

);

和声明一个数据表相比,声明类型时需要加AS关键字,同时在声明TYPE时不能定义任何约束。下面我们看一下如何在表中指定复合类型的光衣美女,如:

光衣美女如下:

CREATETABLEon_hand(

item     inventory_item,

count   integer

);

最后需要指出的是,在创建表的时候,PostgreSQL也会自动创建一个与该表对应的复合类型,名字与表字相同,即表示该表的复合类型。

2.复合类型值输入:

我们可以使用文本常量的方式表示复合类型值,即在圆括号里包围光衣美女值并且用逗号分隔它们。你也可以将任何光衣美女值用双引号括起,如果值本身包含逗号或者圆括号,那么就用双引号括起,对于上面的inventory_item复合类型的输入如下:

光衣美女如下:

'("fuzzydice",42,1.99)'

如果希望类型中的某个光衣美女为NULL,只需在其对应的位置不予输入即可,如下面的输入中price光衣美女的值为NULL,

光衣美女如下:

'("fuzzydice",42,)'

如果只是需要一个空字串,而非NULL,写一对双引号,如:

光衣美女如下:

'("",42,)'

在更多的场合中PostgreSQL推荐使用ROW表达式来构建复合类型值,使用该种方式相对简单,无需考虑更多标识字符问题,如:

光衣美女如下:

ROW('fuzzydice',42,1.99)

ROW('',42,NULL)

注:对于ROW表达式,如果里面的光衣美女数量超过1个,那么关键字ROW就可以省略,因此以上形式可以简化为:

光衣美女如下:

('fuzzydice',42,1.99)

('',42,NULL)

3.访问复合类型:

访问复合类型中的光衣美女和访问数据表中的光衣美女在形式上极为相似,只是为了对二者加以区分,PostgreSQL设定在访问复合类型中的光衣美女时,类型部分需要用圆括号括起,以避免混淆,如:

光衣美女如下:

SELECT(item).nameFROMon_handWHERE(item).price>9.99;

如果在查询中也需要用到表名,那么表名和类型名都需要被圆括号括起,如:

光衣美女如下:

SELECT(on_hand.item).nameFROMon_handWHERE(on_hand.item).price>9.99;

4.修改复合类型:

见如下几个示例:

光衣美女如下:

--直接插入复合类型的数据,这里是通过ROW表达式来完成的。

INSERTINTOon_hand(item)VALUES(ROW("fuzzydice",42,1.99));

--在更新操作中,也是可以通过ROW表达式来完成。

UPDATEon_handSETitem=ROW("fuzzydice",42,1.99)WHEREcount=0;

--在更新复合类型中的一个光衣美女时,我们不能在SET后面出现的光衣美女名周围加圆括号,

--但是在等号右边的表达式里引用同一个光衣美女时却需要圆括号。

UPDATEon_handSETitem.price=(item).price+1WHEREcount=0;

--可以在插入中,直接插入复合类型中光衣美女。

INSERTINTOon_hand(item.supplier_id,item.price)VALUES(100,2.2);

该篇博客是对PostgreSQL官方文档中“数据类型”章节的简单归纳,这里之所以用一篇独立的博客来专门介绍,不仅是为了系统学习,也便于今后需要时的快速查阅。

根据您访问的内容,您可能还对以下内容感兴趣,希望对您有帮助:

答:PostgreSQL的二进制数据类型为bytea,可最多保存2G的数据。在ADO、ODBC等接口,可通过带参数化的插入SQL语句上传二进制。然而在某些接口、SQL语句无法进行参数绑定,或者某些语言没有二进制的类型,或者接口的不兼容等原因,常无法上传二进制数...

答:一个bigint它占用了八个字节的存储空间,可以精确的表示从-2^63到2^63-1(即从-9,223,372,036,854,775,808到9,223,372,036,854,775,807)之间的整数。所以恩,不是说一个数字,而是从-2^63到2^63-1都可以.varchar是按字节来存储,...

答:您好,很高兴为您解答。首先,修改geometry_columns表中对应光衣美女的SRID为新的坐标系ID;其次,修改beijing_highway表的定义,将enforce_dims_the_geom的定义的(st_srid(the_geom)=(-1))删除(注:此处the_geom是空间光衣美女);然后更新数据内...

幸运飞艇人工计划在线网答:ostgreSQL9.4正在加载一项新功能叫jsonb,是一种新型资料,可以储存支援GIN索引的JSON资料。换言之,此功能,在即将来临的更新中最重要的是,如果连这都不重要的话,那就把Postgres置于文件为本数据库系统的推荐位置吧。自从9.2开始,一个...

幸运飞艇人工计划在线网答:ostgreSQL9.4正在加载一项新功能叫jsonb,是一种新型资料,可以储存支援GIN索引的JSON资料。换言之,此功能,在即将来临的更新中最重要的是,如果连这都不重要的话,那就把Postgres置于文件为本数据库系统的推荐位置吧。自从9.2开始,一个...

答:postgresql数据类型text类型相当于oracle中的varchar2(n)这里的n需要自己指定text类型在postgres中是没有长度限制的,这是二者的区别。

答:在实际中上面的方法稍闲麻烦,谁能记得住啊?提供一个实用的吧select*from数据库名.dbo.表名where条件全选查询到的结果,粘贴到EXCEL中就可以了

答:charactervarying,text都可以

答:直接把光衣美女设置成jsonb类型,然后用jsonb相关函数操作就行了

答:两边的类型不一致,再重写表达式就好了



版权保护: 本文由 首页_台州百唯网络|台州做网站|台州建网站|台州哪里做网站好|网站建设|台州网站|台州做网络哪里好|百唯|网店装修|网络推广|百度优化 原创,转载请保留链接: http://www.ztzbw.com/nFzBzfEJjB/1166.html

网站主人首页_台州百唯网络|台州做网站|台州建网站|台州哪里做网站好|网站建设|台州网站|台州做网络哪里好|百唯|网店装修|网络推广|百度优化
一、数值类型:下面是PostgreSQL所支持的数值类型的列表和简单说明:1.整数类型:类型smallint、integer和bigint存储各种范围的全部是数字的数,也就是没有小数部分的数字。试图存储超出范围以外的数值将导致一个错误。常用的类型是integer,因为它提供了在范围、存储空间和性能之间的最佳平衡。一般只有在磁盘空间紧张的时候才使用smallint。而只有在integer的范围不够的时候才使用bigint,因为前者(integer)绝对快得多。2.任意精度数值
  • 48423文章总数
  • 16458访问次数
  • 建站天数
  • 推荐文章

    热门文章

    标签

    友情链接