关键词不能为空

当前您在: 主页 > 数学 >

PostgreSQL学习手册

作者:高考题库网
来源:https://www.bjmy2z.cn/gaokao
2020-10-06 04:58
tags:高中数学手册

C40高中数学什么意思-高中数学公式及定理 公理汇总

2020年10月6日发(作者:靳智翼)


tgreSQL学习手册(五) 函数和操作符
阿里云携手开源中国众包平台发布百万悬赏项目 ?
一、逻辑操作符:

常用的逻辑操作符有:AND、OR和NOT。其语义与其它编程语言中的逻辑操作符完
全相同。

二、比较操作符:

下面是PostgreSQL中提供的比较操作符列表:
操作符

<

>

<=

>=

=

!=

描述

小于

大于

小于或等于

大于或等于

等于

不等于

比较操作符可以用于所有可以比较的数据类型。所有比较操作符都是双目操作符,且返
回boolean类型。除了比较操作符以外,我们还可以使用BETWEEN语句,如:
a BETWEEN x AND y 等效于 a >= x AND a <= y
a NOT BETWEEN x AND y 等效于 a < x OR a > y

三、 数学函数和操作符:

下面是PostgreSQL中提供的数学操作符列表:
操作符

+

-

*



%

^

|

||

!

!!

@

&

|

描述













平方根

立方根

阶乘

阶乘

绝对值

按位AND

按位OR

例子

2 + 3

2 - 3

2 * 3

4 2

5 % 4

2.0 ^ 3.0

| 25.0

|| 27.0

5 !

!! 5

@ -5.0

91 & 15

32 | 3

结果

5

-1

6

2

1

8

5

3

120

120

5

11

35


#

~

<<

>>

按位XOR

按位NOT

按位左移

按位右移

17 # 5

~1

1 << 4

8 >> 2

20

-2

16

2

按位操作符只能用于整数类型,而其它的操作符可以用于全部数值数据类型。按位操作
符还可以用于位串 类型bit和bit varying,
下面是PostgreSQL中提供的数学函数列表 ,需要说明的是,这些函数中有许多都存在
多种形式,区别只是参数类型不同。除非特别指明,任何特定 形式的函数都返回和它的参数
相同的数据类型。
函数

abs(x)

cbrt(double)

ceil(doublenumeric)

degrees(double)

exp(doublenumeric)

floor(doublenumeric)

ln(doublenumeric)

log(doublenumeric)

log(b numeric,x numeric)

mod(y, x)

pi()

power(a numeric, b
numeric)

radians(double)

random()

round(doublenumeric)

round(v numeric, s int)

sign(doublenumeric)

sqrt(doublenumeric)

trunc(doublenumeric)

trunc(v numeric, s int)

返回类


描述

绝对值

立方根

不小于参数的最小的整


把弧度转为角度

自然指数

自然对数

10为底的对数

numeric指定底数的对


取余数

例子

abs(-17.4)

cbrt(27.0)

ceil(-42.8)

degrees(0.5)

exp(1.0)

ln(2.0)

log(100.0)

log(2.0, 64.0)

mod(9,4)

pi()

结果

17.4

3

-42

28.6478897565412

2.705

-43

0.6935

2

6.

1

3.979











不大于参数的最大整数

floor(-42.8)

double

常量

power(a double, b double)

double

求a的b次幂

numeric

求a的b次幂

double

把角度转为弧度

double

0.0到1.0之间的随机
数值

圆整为最接近的整数

power(9.0, 3.0)

729

power(9.0, 3.0)

729

radians(45.0)

random()

round(42.4)

0.785398163397448


42

-1

1.41

42





numeric

圆整为s位小数数字

平方根

截断(向零靠近)

round(42.438,2)

42.44

sqrt(2.0)

trunc(42.8)

参数的符号(-1,0,+1)

sign(-8.4)

截断为s小数位置的数
numeric

trunc(42.438,2)

42.43



描述

反余弦

三角函数列表:
函数

acos(x)


asin(x)

atan(x)

反正弦

反正切

atan2(x, y)

正切 yx 的反函数

cos(x)

余弦

cot(x)

余切

sin(x)

正弦

tan(x)

正切


四、字符串函数和操作符:

下面是PostgreSQL中提供的字符串操作符列表:
函数

返回
类型

描述

例子

string || string

text

字串连接

'Post' || 'greSQL'

bit_length(string)

int

字串里二进制位的个数

bit_length('jose')

char_length(string)

int

字串中的字符个数

char_length('jose')

convert(string using
conversion_name)

text

使用指定的转换名字改变编
convert('PostgreSQL' using
码。

iso_8859_1_to_utf8)

lower(string)

text

把字串转化为小写

lower('TOM')

octet_length(string)

int

字串中的字节数

octet_length('jose')

overlay(string placing overlay('Txxxxas' placing 'hom'
string from int [for int])

text

替换子字串

from 2 for 4)

position(substring in
string)

int

指定的子字串的位置

position('om' in 'Thomas')

substring(string [from
int] [for int])

text

抽取子字串

substring('Thomas' from 2 for 3)
substring(string from
pattern)

text

抽取匹配 POSIX 正则表达
式的子字串

substring('Thomas' from '...$$')

substring(string from
pattern for escape)

text

抽取匹配SQL正则表达式的
substring('Thomas' from
子字串

'%#

trim([leading | trailing |
从字串string的开头结尾
both] [characters] from text

两边 删除只包含
string)

characters(缺省是一个空
trim(both 'x' from 'xTomxx')

白)的最长的字串

upper(string)

text

把字串转化为大写。

upper('tom')

ascii(text)

int

参数第一个字符的ASCII码

ascii('x')

btrim(string text [,
从string开头和结尾删除只
characters text])

text

包含在characters里(缺省
btrim('xyxtr imyyx','xy')

是空白)的字符的最长字串

chr(int)

text

给出ASCII码的字符

chr(65)

convert(string text,
[src_encoding name,]
text

把字串转换为
convert( 'text_in_utf8', 'UTF8',
dest_encoding

'LATIN1')

结果

PostgreSQL

32

4

'PostgreSQL'

tom

4

Thomas

3

hom

mas

oma

Tom

TOM

120

trim

A

以ISO 8859-1编
码表示的


dest_encoding name)

把每个单词的第一个子母转
initcap(text)

为大写,其它的保留小写。
text

initcap('hi thomas')

单词是一系列字母数字组成
的字符,用非字母数字分隔。

length(string text)

int

string中字符的数目

通过填充字符fill(缺省时为
lpad(string text, length
int [, fill text])

空白),把string填充为长度
text

length。 如果string已经
lpad('hi', 5, 'xy')

比length长则将其截断(在
右边)。

ltrim(string text [,
characters text])

md5(string text)

repeat(string text,
number int)

replace(string text, from
text, to text)

从字串string的开头删除只
text

包 含characters(缺省是一
ltrim('zzzytrim','xyz')

个空白)的最长的字串。

计算给出string的MD5散
text

md5('abc')

列,以十六进制返回结果。

text

重复string number次。

repeat('Pg', 4)

把字串string里出现地所有
length('jose')

text_in_utf8

Hi Thomas

4

xyxhi

trim


PgPgPgPg

text

子字串from替换成子字串
replace('abcdefabcdef', 'cd', 'XX')

abXXefabXXef

to。

通过填 充字符fill(缺省时为
空白),把string填充为长度
text

rpad('hi', 5, 'xy')

length。如果string已经比
length长则将其截断。

rpad(string text, length
int [, fill text])

hixyx

rtrim(string text [,
character text])

split_part(string text,
delimiter text, field int)

从字串string的结尾删除只
text

包含character(缺省是个空
rtrim('trimxxxx','x')

白)的最长的字

根据delimiter分隔string
text

返回生成的第field个子字串
(1 Base)。

split_part('abc~@~def~@~ghi',
'~@~', 2)

strpos('high','ig')

substr('alphabet', 3, 2)

to_ascii('Karel')

def

2

ph

Karel

trim

strpos(string, substring)

text

声明的子字串的位置。

substr(string, from [,
count])

to_ascii(text [,
encoding])

to_hex(number
intbigint)

translate(string text,
from text, to text)

text

抽取子字串。

把text从其它编码转换为
text

ASCII。

把number转换成其对应地
text

to_hex(9223372)

7fffffffffffffff

十六进制表现形式。

把在string中包含的任何匹
text

配from中的字符的字符转
translate('12345', '14', 'ax')

化为对应的在to中的字符。

a23x5



五、位串函数和操作符:

对于类型bit和bit varying,除了常用的比较操作符之外,还可以使用以下列表中由
Po stgreSQL提供的位串函数和操作符,其中&、|和#的位串操作数必须等长。在移位的时
候,保 留原始的位串的的长度。
操作符

||

&

|

#

~

<<

>>

描述

连接

按位AND

按位OR

按位XOR

按位NOT

按位左移

按位右移

例子

B'10001' || B'011'

B'10001' & B'01101'

B'10001' | B'01101'

B'10001' # B'01101'

~ B'10001'

B'10001' << 3

B'10001' >> 2

结果

10001011

00001

11101

11100

01110

01000

00100

除了以上列表中提及的操作符之外,位串还可以使用字符串函数:length, bit_length,
octet_length, position, substring。此外,我们还可以在整数和bit之间来回转换,
如:
MyTest=# SELECT 44::bit(10);
bit
------------

(1 row)
MyTest=# SELECT 44::bit(3);
bit
-----
100
(1 row)
MyTest=# SELECT cast(-44 as bit(12));
bit
--------------
0
(1 row)
MyTest=# SELECT '1110'::bit(4)::integer;
int4
------
14
(1 row)
注意:如果只是转换为,意思是转换成bit(1),因此只会转换成整数的最低位。


六、模式匹配:

PostgreSQL中提供了三种实现模式匹配的方法:SQL LIKE操作符,更近一些的
SIMILAR TO操作符,和POSIX-风格正则表达式。
1. LIKE:

string LIKE pattern [ ESCAPE escape-character ]
string NOT LIKE pattern [ ESCAPE escape-character ]
每个patt ern定义一个字串的集合。如果该string包含在pattern代表的字串集合里,
那么LIK E表达式返回真。和我们想象的一样,如果 LIKE返回真,那么NOT LIKE表达
式返回假,反 之亦然。在pattern里的下划线(_)代表匹配任何单个字符,而一个百分号(%)
匹配任何零或 更多字符,如:
'abc' LIKE 'abc' true
'abc' LIKE 'a%' true
'abc' LIKE '_b_' true
'abc' LIKE 'c' false
要匹配文本的下划线或者百分号,而不是匹配其它字符,在pattern里相应的字符必须
前导转义字 符。缺省的转义字符是反斜杠,但是你可以用ESCAPE子句指定一个。要匹配
转义字符本身,写两个 转义字符。我们也可以通过写成ESCAPE ''的方式有效地关闭转义
机制,此时,我们就不能关闭下划线和百分号的特殊含义了。
关键字ILIKE可以用于替换LIKE,令该匹配就当前的区域设置是大小写无关的。这个
特性不是S QL标准,是PostgreSQL的扩展。操作符~~等效于LIKE, 而~~*对应
ILIKE。还有!~~和!~~*操作符分别代表NOT LIKE和NOT ILIKE。所有这些操作
符都是PostgreSQL特有的。

2. SIMILAR TO正则表达式:

SIMILAR TO根据模式是否匹配给定的字符串而返回真或者假。
string SIMILAR TO pattern [ESCAPE escape-character]
string NOT SIMILAR TO pattern [ESCAPE escape-character]
它和LIKE非常类似,支持LIKE的通配符('_'和'%')且保持其原意。除此之外,
SIMILAR TO还支持一些自己独有的元字符,如:
1). | 标识选择(两个候选之一)。
2). * 表示重复前面的项零次或更多次。
3). + 表示重复前面的项一次或更多次。
4). 可以使用圆括弧()把项组合成一个逻辑项。
5). 一个方括弧表达式[...]声明一个字符表,就像POSIX正则表达式一样。
见如下示例:
'abc' SIMILAR TO 'abc' true
'abc' SIMILAR TO 'a' false
'abc' SIMILAR TO '%(b|d)%' true
'abc' SIMILAR TO '(b|c)%' false
带三个参数的substring,substring(string from pattern for escape-character),
提供了一个从字串中抽取一个匹配SQL正则表达式模式的子字 串的函数。和SIMILAR TO


一样,声明的模式必须匹配整个数据串,否则函数失 效并返回NULL。为了标识在成功的时
候应该返回的模式部分,模式必须出现后跟双引号(的两个转 义字符。匹配这两个标记之
间的模式的字串将被返回,如:
MyTest=# SELECT substring('foobar' from '%#--
这里
#
是转义符,双引号内的模式是返回部分。

substring
-----------
oob
(1 row)
MyTest=# SELECT substring('foobar' from '# --foobar
不能完全匹配后面的模式,因此返回
NULL


substring
-----------

(1 row)

七、数据类型格式化函数:

PostgreSQL格式化函数提 供一套有效的工具用于把各种数据类型(日期时间、
integer、floating point和 numeric)转换成格式化的字符串以及反过来从格式化的字符
串转换成指定的数据类型。下面列出 了这些函数,它们都遵循一个公共的调用习 惯:第一
个参数是待格式化的值,而第二个是定义输出或输出格式的模板。
函数

返回类型

描述

例子

把时间戳转换成字
to_char(current_timestamp,


'HH12:MI:SS')

把时间间隔转为字
to_char(interval '15h 2m 12s',


'HH24:MI:SS')

把整数转换成字串

to_char(125, '999')

把实数双精度数
to_char(125.8::real, '999D9')

转换成字串

把numeric转换
to_char(-125.8, '999D99S')

成字串

把字串转换成日期

to_date('05 Dec 2000', 'DD Mon
YYYY')

to_char(timestamp, text)

text

to_char(interval, text)

to_char(int, text)

text

text

to_char(double precision,
text

text)

to_char(numeric, text)

to_date(text, text)

text

date

把字串转换成时间
to_timestamp('05 Dec 2000', 'DD
to_timestamp(text, text)

timestamp



Mon YYYY')

to_timestamp(double)

to_number(text, text)

把UNIX纪元转换
timestamp

to_timestamp(200120400)

成时间戳

numeric

把字串转换成
numeric

to_number('12,454.8-',
'99G999D9S')


1. 用于日期时间格式化的模式:

模式

描述


HH

HH12

HH24

MI

SS

MS

US

AM

YYYY

YYY

YY

Y

一天的小时数(01-12)

一天的小时数(01-12)

一天的小时数(00-23)

分钟(00-59)

秒(00-59)

毫秒(000-999)

微秒(000000-999999)

正午标识(大写)

年(4和更多位)

年的后三位

年的后两位

年的最后一位

Y,YYY

带逗号的年(4和更多位)

MONTH

全长大写月份名(空白填充为9字符)

Month

全长混合大小写月份名(空白填充为9字符)

month

全长小写月份名(空白填充为9字符)

MON

Mon

mon

MM

DAY

Day

day

DY

Dy

dy

DDD

DD

D

W

WW

模式

9

0

.(句点)

,(逗号)

PR

S

L

大写缩写月份名(3字符)

缩写混合大小写月份名(3字符)

小写缩写月份名(3字符)

月份号(01-12)

全长大写日期名(空白填充为9字符)

全长混合大小写日期名(空白填充为9字符)

全长小写日期名(空白填充为9字符)

缩写大写日期名(3字符)

缩写混合大小写日期名(3字符)

缩写小写日期名(3字符)

一年里的日子(001-366)

一个月里的日子(01-31)

一周里的日子(1-7;周日是1)

一个月里的周数(1-5)(第一周从该月第一天开始)

一年里的周数(1-53)(第一周从该年的第一天开始)

描述

带有指定数值位数的值

带前导零的值

小数点

分组(千)分隔符

尖括号内负值

带符号的数值

货币符号


2. 用于数值格式化的模板模式:


D

G

MI

PL

SG


小数点

分组分隔符

在指明的位置的负号(如果数字 < 0)

在指明的位置的正号(如果数字 > 0)

在指明的位置的正负号

八、时间日期函数和操作符:


1. 下面是PostgreSQL中支持的时间日期操作符的列表:

操作


+

+

+

+

+

+

-

-

-

-

-

-

-

-

-

*



函数

age(timestamp,
timestamp)

age(timestamp)

例子

date '2001-09-28' + integer '7'

date '2001-09-28' + interval '1 hour'

date '2001-09-28' + time '03:00'

interval '1 day' + interval '1 hour'

timestamp '2001-09-28 01:00' + interval '23 hours'

time '01:00' + interval '3 hours'

- interval '23 hours'

date '2001-10-01' - date '2001-09-28'

date '2001-10-01' - integer '7'

date '2001-09-28' - interval '1 hour'

time '05:00' - time '03:00'

time '05:00' - interval '2 hours'

timestamp '2001-09-28 23:00' - interval '23 hours'

interval '1 day' - interval '1 hour'

timestamp '2001-09-29 03:00' - timestamp '2001-09-27
12:00'

interval '1 hour' * double precision '3.5'

interval '1 hour' double precision '1.5'

结果

date '2001-10-05'

timestamp '2001-09-28
01:00'

timestamp '2001-09-28
03:00'

interval '1 day 01:00'

timestamp '2001-09-29
00:00'

time '04:00'

interval '-23:00'

integer '3'

date '2001-09-24'

timestamp '2001-09-27
23:00'

interval '02:00'

time '03:00'

timestamp '2001-09-28
00:00'

interval '23:00'

interval '1 day 15:00'

interval '03:30'

interval '00:40'

例子

age('2001-04-10',
timestamp
'1957-06-13')

'1957-06-13')

结果

43 years 9
mons 27 days

43 years 8
mons 3 days


2. 日期时间函数:

返回类型

interval

描述

减去参数,生成一个使用
年、月的符号化的结果

interval

从current_date减去得到
age(timestamp
的数值


current_date

current_time

date

time

今天的日期

现在的时间

日期和时间

current_timestamp

timestamp

date_part(text,
timestamp)

date_part(text,
interval)

date_trunc(text,
timestamp)

extract(field from
timestamp)

extract(field from
interval)

localtime

localtimestamp

now()

timeofday()



double




date_part('hour',



获取子域(等效于extract)

timestamp '2001-02-16 20

20:38:40')

date_part('month',
double

获取子域(等效于extract)

interval '2 years 3
months')

date_trunc('hour',
3

截断成指定的精度

timestamp

timestamp '2001-02-16
20:38:40')

extract(hour from
2001-02-16
20:00:00+00

double

获取子域

timestamp '2001-02-16 20

20:38:40')

extract(month from
double

time

获取子域

今日的时间

interval '2 years 3
months')

3

日期和时间

timestamp







结果

20

当前的日期和时间(等效于
timestamp


current_timestamp)



3. EXTRACT,date_part函数支持的field:

描述

例子

EXTRACT(CENTURY FROM
世纪

TIMESTAMP '2000-12-16
12:21:13');

text

当前日期和时间

CENTURY

DAY

DECADE

DOW

DOY

HOUR

(月分)里的日期域(1-31)

年份域除以10

EXTRACT(DAY from TIMESTAMP
'2001-02-16 20:38:40');

16

EXTRACT(DECADE from TIMESTAMP
200

'2001-02-16 20:38:40');

'2001-02-16 20:38:40');

'2001-02-16 20:38:40');

EXTRACT(HOUR from TIMESTAMP
'2001-02-16 20:38:40');

EXTRACT(MICROSECONDS from
TIME '17:12:28.5');

EXTRACT(MILLENNIUM from
TIMESTAMP '2001-02-16
5

47

20

28500000

3

每周的星期号(0-6;星期天是0) (仅
EXTRACT(DOW FROM TIMESTAMP
用于timestamp)

timestamp)

小时域(0-23)

一年的第几天(1 -365366) (仅用于
EXTRACT(DOY from TIMESTAMP
秒域,包括小数部分,乘以
MICROSECONDS

1,000,000。

MILLENNIUM

千年


20:38:40');

MILLISECONDS

秒域,包括小数部分,乘以 1000。

MINUTE

分钟域(0-59)

对于timestamp数值,它是一年里的
MONTH

EXTRACT(MILLISECONDS from
TIME '17:12:28.5');

28500

EXTRACT(MINUTE from TIMESTAMP
38

'2001-02-16 20:38:40');

EXTRACT(MONTH from TIMESTAMP
月份数(1-12);对于interval数值,
2

'2001-02-16 20:38:40');

它是月的数目,然后对12取模(0-11)

该天所在的该年的季度(1-4)(仅用于
timestamp)

EXTRACT(QUARTER from
TIMESTAMP '2001-02-16
20:38:40');

EXTRACT(SECOND from
TIMESTAMP '2001-02-16
20:38:40');

EXTRACT(WEEK from TIMESTAMP
'2001-02-16 20:38:40');

EXTRACT(YEAR from TIMESTAMP
'2001-02-16 20:38:40');

40

1

QUARTER

SECOND

秒域,包括小数部分(0-59[1])

WEEK

YEAR

该天在所在的年份里是第几周。

年份域

7

2001


4. 当前日期时间:

我们可以使用下面的函数获取当前的日期和或时间∶
CURRENT_DATE
CURRENT_TIME
CURRENT_TIMESTAMP
CURRENT_TIME (precision)
CURRENT_TIMESTAMP (precision)
LOCALTIME
LOCALTIMESTAMP
LOCALTIME (precision)
LOCALTIMESTAMP (precision)

九、序列操作函数:

序列对象(也叫序列生成器)都是用CREATE SEQUENCE创建的特殊的单行表。一个序
列对 象通常用于为行或者表生成唯一的标识符。下面序列函数,为我们从序列对象中获取最
新的序列值提供了 简单和并发读取安全的方法。
函数

nextval(regclass)

返回类


bigint

描述

递增序 列对象到它的下一个数值并且返回该值。这个动作是自动完成的。即使
多个会话并发运行nextval ,每个进程也会安全地收到一个唯一的序列值。

在当前会话中返回最近一次
next val
抓到的该序列的数值。(如果在本会话中
currval(regclass)

bigint

从未在该序列上调用过
nextval
,那么会报 告一个错误。)请注意因为此函数
返回一个会话范围的数值,而且也能给出一个可预计的结果,因此可以 用于判


断其它会话是否执行过
nextval。
返回当前会话里最近 一次
nextval
返回的数值。这个函数等效于
currval

lastval()

bigint

只是它不用序列名为参数,它抓取当前 会话里面最近一次
nextval
使用的序
列。如果当前会话还没有调用过
n extval
,那么调用
lastval
setval(regclass,
bigint)

setval(regclass,
bigint, boolean)


会报错。

重置序列对象的计数器数值。设置 序列的
last_value
字段为指定数值并且将
bigint


is_called
字段设置为
true
,表示下一次
nextv al
将在返回数值之前递
增该序列。

重置序列对象的计数器数值。功能等同 于上面的setval函数,只是
is_called
bigint

可以设 置为
true

false
。如果将其设置为
false
, 那么下一次
nextval
将返回该数值,随后的
nextval
才开始递增 该序列。

对于regclass参数,仅需用单引号括住序列名即可,因此它看上去 就像文本常量。为
了达到和处理普通SQL对象一样的兼容性,这个字串将被转换成小写,除非该序列名 是用
双引号括起,如:
nextval('foo') --
操作序列号
foo
nextval('FOO') --
操作序列号
foo
nextval('--
操作序列号
Foo
SELECT setval('foo', 42); --
下次
nextval
将返回
43
SELECT setval('foo', 42, true);
SELECT setval('foo', 42, false); --
下次
nextval
将返回
42

十、条件表达式:


1. CASE:

SQL CASE表达式是一种通用的条件表达式,类似于其它语言中的ifelse语句。
CASE WHEN condition THEN result
[WHEN ...]
[ELSE result]
END
condition是一个返回boolean的表达式。如果为真,那么CASE表达式的结果就是符
合条件的result。如果结果为假,那么以相同方式 搜寻随后的WHEN子句。如果没有
WHEN condition为真,那么case表达式的结果就是在ELSE子句里的值。如果省略了
ELSE 子句而且没有匹配的条件,结果为NULL,如:
MyTest=> SELECT * FROM testtable;
i
---
1
2
3
(3 rows)
MyTest=> SELECT i, CASE WHEN i=1 THEN 'one'
MyTest-> WHEN i=2 THEN 'two'
MyTest-> ELSE 'other'


MyTest-> END
MyTest-> FROM testtable;
i | case
---+-------
1 | one
2 | two
3 | other
(3 rows)
注:CASE表达式并不计算任何对于判断结果并不需要的子表达式。


2. COALESCE:

COALESCE返回它的第一个非NULL的 参数的值。它常用于在为显示目的检索数据时
用缺省值替换NULL值。
COALESCE(value[, ...])
和CASE表达式一样,COALESCE 将不会计算不需要用来判断结果的参数。也就是说,
在第一个非空参数右边的参数不会被计算。


3. NULLIF:

当且仅当value1和value2相等时,NULLIF才返回NULL。否则它返回value1。
NULLIF(value1, value2)
MyTest=> SELECT NULLIF('abc','abc');
nullif
--------

(1 row)
MyTest=> SELECT NULLIF('abcd','abc');
nullif
--------
abcd
(1 row)


4. GREATEST和LEAST:

GREATEST和LEAST函数从一个任意的数字表达式列表里选取最大或者最小的数值。
列表中的 NULL数值将被忽略。只有所有表达式的结果都是NULL的时候,结果才会是
NULL。
GREATEST(value [, ...])
LEAST(value [, ...])
MyTest=> SELECT GREATEST(1,3,5);
greatest
----------
5
(1 row)


MyTest=> SELECT LEAST(1,3,5,NULL);
least
-------
1
(1 row)

十一、数组函数和操作符:


1. PostgreSQL中提供的用于数组的操作符列表:

操作符

描述

=

<>

<

>

<=

>=

||

||

||

||

等于

不等于

小于

大于

小于或等于

大于或等于

例子

ARRAY[1.1,2.1,3.1]::int[] = ARRAY[1,2,3]

ARRAY[1,2,3] <> ARRAY[1,2,4]

ARRAY[1,2,3] < ARRAY[1,2,4]

ARRAY[1,4,3] > ARRAY[1,2,4]

ARRAY[1,2,3] <= ARRAY[1,2,3]

ARRAY[1,4,3] >= ARRAY[1,4,3]

结果

t

t

t

t

t

t

{1,2,3,4,5,6}

{{1,2,3},{4,5,6},{7,8,9}}

{3,4,5,6}

{4,5,6,7}

数组与数组连接

ARRAY[1,2,3] || ARRAY[4,5,6]

数组与数组连接

ARRAY[1,2,3] || ARRAY[[4,5,6],[7,8,9]]

元素与数组连接

3 || ARRAY[4,5,6]

元素与数组连接

ARRAY[4,5,6] || 7

2. PostgreSQL中提供的用于数组的函数列表:

函数

返回类型

描述

例子

结果

连接两个数组

array_cat(ARRAY[1,2,3], ARRAY[4,5])

{1,2,3,4,5}

array_cat(anyarray, anyarray)

anyarray

array_append(anyarray,
anyelement)

array_prepend(anyelement,
anyarray)

向一个数组末
尾附加一个元
array_append(ARRAY[1,2], 3)

anyarray



向一个数组开
头附加一个元
array_prepend(1, ARRAY[2,3])

anyarray



返回一个数组
array_dims(anyarray)

text

维数的文本表
array_dims(ARRAY[[1,2,3], [4,5,6]])

[1:2][1:3]



array_lower(anyarray, int)

array_upper(anyarray, int)

int

int

返回指定的数
array_lower(array_prepend(0,
组维数的下界

ARRAY[1,2,3]), 1)

返回指定数组
维数的上界

使用提供的分
array_to_string(anyarray, text)

text

隔符连接数组
array_to_string(ARRAY[1, 2, 3], '~^~')

1~^~2~^~3

元素

使用指定的分
string_to_array(text, text)

text[]

隔符把字串拆
分成数组元素

string_to_array('xx~^~yy~^~zz',
'~^~')

{xx,yy,zz}

array_upper(ARRAY[1,2,3,4], 1)

0

4

{1,2,3}

{1,2,3}



十二、系统信息函数:


1. PostgreSQL中提供的和数据库相关的函数列表:

名字

current_database()

current_schema()

current_schemas(boolean)

current_user

inet_client_addr()

inet_client_port()

inet_server_addr()

inet_server_port()

session_user

pg_postmaster_start_time()

user

version()


返回类型

name

name

name[]

name

inet

int

inet

int

name

timestamp

name

text

描述

当前数据库的名字

当前模式的名字

在搜索路径中的模式名字

目前执行环境下的用户名

连接的远端地址

连接的远端端口

连接的本地地址

连接的本地端口

会话用户名

postmaster启动的时间

current_user

PostgreSQL版本信息

2. 允许用户在程序里查询对象访问权限的函数:

名字

可用权限







has_table_privilege(user,table,privilege)
访
SELECT

INSERTUPDATE

DELETERUL EREFERENCES

TRIGGER











has_table_privilege(table,privilege)


SELECT

INSERTUPDATE

DELETER ULEREFERENCES

TRIGGER

访











访
has_database_privil ege(user,database,privilege)

has_database_privilege(database,privilege)

has_function_privilege(user,function,privilege )

has_function_privilege(function,privilege)


CREATE

TEMPORARY














访
CREATE

TEMPORA RY













访

EXECUTE








EXECUTE


has_language_priv ilege(user,language,privilege)
has_language_pri vilege(language,privilege)

has_schema_priv ilege(user,schema,privilege)





访












访

USAGE













访
USAGE











CREATUSAGE

访















has_schema_privileg e(schema,privilege)


访












访

CREATE
has_tablespace_privilege(user,tablespace,privilege )













has_tablespace_privilege(table space,privilege)


CREATE

访



CREATUSAGE








注:以上函数 均返回
boolean
类型。要评估一个用户是否在权限上持有赋权选项,给权
限键字 附加
WITH GRANT OPTION
;比如
'UPDATE WITH GRANT OPTION'



3. 模式可视性查询函数:

那些判断一个对象是否在当前模式搜索路径中可见的函数。 如果一个表所在的模式在
搜索路径中,并且没有同名的表出现在搜索路径的更早的地方,那么就说这个表视可见的。
它等效于表可以不带明确模式修饰进行引用。
名字

pg_table_is_visible(table_oid)

pg_type_is_visible(type_oid)

pg_function_is_visible(function_oid)

pg_operator_is_visible(operator_oid)

pg_opclass_is_visible(opclass_oid)

pg_conversion_is_visible(conversion_oid)

描述

该表视图是否在搜索路径中可见

该类视图型是否在搜索路径中可见

该函数是否在搜索路径中可见

该操作符是否在搜索路径中可见

该操作符表是否在搜索路径中可见

转换是否在搜索路径中可见

应用类型

regclass

regtype

regprocedure

regoperator

regclass

regoperator


注:以上函数均返回
boolean
类型,所有这些函数都需要对象
OID
标识作为检查的对
象。

postgres=# SELECT pg_table_is_visible('testtable'::regclass);
pg_table_is_visible
---------------------
t
(1 row)


4. 系统表信息函数:

名字

format_type(type_oid,typemod)

pg_get_viewdef(view_oid)

pg_get_viewdef(view_oid,pretty_bool)

pg_get_ruledef(rule_oid)

pg_get_ruledef(rule_oid,pretty_bool)

pg_get_indexdef(index_oid)

返回类


text

text

text

text

text

text

描述

获取一个数据类型的SQL名称

为视图获取CREATE VIEW命令

为视图获取CREATE VIEW命令

为规则获取CREATE RULE命令

为规则获取CREATE RULE命令

为索引获取CREATE INDEX命令

为索引获取CREATE INDEX命令, 如果
pg_get_ indexdef(index_oid,column_no,pretty_bool)

text

column_no不为零,则是只获取一个索引
字段的定义

pg_get_triggerdef(trigger_oid)

pg_get_constraintdef(constraint_oid)

p g_get_constraintdef(constraint_oid,pretty_bool)

text

text

text

为触发器获取CREATE [CONSTRAINT]
TRIGGER

获取一个约束的定义

获取一个约束的定义


反编译 一个表达式的内部形式,假设其中
pg_get_expr(expr_text,relation_ oid)

text

的任何Vars都引用第二个参数指出的关


反编译一个表达式的内部形式 ,假设其中
pg_get_expr(expr_text,relation_oid, pretty_bool)

pg_get_userbyid(roleid)

text

的任何Vars都引用第二个参数指出的关


name

获取给出的ID的角色名

获取一个serial或者bigserial字段使用的
序列名字

的一套数据库的OID的集合

pg_get_serial_sequence(t able_name,column_name)

text

pg_tablespace_databases(tablespace_oid)

setof
获取在指定表空间(OID表示)中拥有对象
oid

这些函数大多数都有两个变种,其中一个可以选择对结果的漂亮的打印。 漂亮打印的
格式更容易读,但 是缺省的格式更有可能被将来的PostgreSQL版本用同样的方法解释;
如果是用于转储,那么尽 可能避免使用漂亮打印。 给漂亮打印参数传递false生成的结果
和那个没有这个参数的变种生成的结果完全一样。

十三、系统管理函数:


1. 查询以及修改运行时配置参数的函数:

名字

current_setting(setting_name)

返回类型

描述

text

当前设置的值

设置参数并返回新值

set_config(setting_name,new_ value,is_local)

text

current_s etting用于以查询形式获取setting_name设置的当前数值。它和SQL命
令SHOW 是等效的。 比如:
MyTest=# SELECT current_setting('datestyle');
current_setting
-----------------
ISO, YMD
(1 row)
set_config将参数sett ing_name设置为new_value。如果is_local设置为true,
那么新数值将只 应用于当前事务。如果你希望新的数值应用于当前会话,那么应该使用
false。它等效于SQL命令 SET。比如:
MyTest=# SELECT set_config('log_statement_stats','off', false);
set_config
------------
off
(1 row)


2. 数据库对象尺寸函数:

名字

pg_tablespace_size(oid)

返回类


描述

bigint

指定OID代表的表空间使用的磁盘空间


pg_tablespace_size(name)

bigint

指定名字的表空间使用的磁盘空间

pg_database_size(oid)

pg_database_size(name)

pg_relation_size(oid)

pg_relation_size(text)

bigint

指定OID代表的数据库使用的磁盘空间

bigint

指定名称的数据库使用的磁盘空间

bigint

bigint

指定OID代表的表或者索引所使用的磁盘空


指定名称的表或者索引使用的磁盘空间。这
个名字可以用模式名修饰

指定OID代表的表使用的磁盘空间,包括索
引和压缩数据

指定名字的表所 使用的全部磁盘空间,包括
索引和压缩数据。表名字可以用模式名修饰。

把字节计算的尺寸转换成一个人类易读的尺
寸单位

返回
类型

pg_total_relation_size(oid)

bigint

pg_total_relation_size(text)

bigint

pg_size_pretty(bigint)

text


3. 数据库对象位置函数:

名字

描述

获取指定对象的文件节点编
号(通常为对象的oid值)。

获取指定对象的完整路径名。

pg_relation_filenode(relationregclass) oid
text

pg_relation_filepath(relationregclass)

高中数学必修一错题集-高中数学总结有多知乎


高中数学可能考满分吗-高中数学复习列表


高中数学竞赛教研员培训-高中数学选择题如何提升


高中数学选修2 1试题及答案-高中数学经典教案


高中数学求定义域-高中数学4长什么样


江苏高中数学理科a版 b版-高中数学解题纠错反思研究


高中数学a 云盘-职高高中数学学案


高中数学必修三条件语句说课PPT-高中数学中的计算技巧



本文更新与2020-10-06 04:58,由作者提供,不代表本网站立场,转载请注明出处:https://www.bjmy2z.cn/gaokao/410479.html

PostgreSQL学习手册的相关文章