PostgreSQL函数和运算符(一)

前端之家收集整理的这篇文章主要介绍了PostgreSQL函数和运算符(一)前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。

Postgresql为内置数据类型提供了大量的函数和运算符。用户也可以定义自己的函数(参考第11章)。在psql中执行命令@H_403_13@/df/do可以分别列出可用的函数和运算符的列表。

本章中的大部分函数和运算符都是sql标准中定义的,也有一部分是Postgresql自己扩展的。sql标准定义了一些有特殊语法的字符串函数,这些函数使用特殊关键字而不是逗号来分隔参数,例如fromfor

7.1 逻辑运算符

常用的逻辑运算符有:

@H_403_13@AND

@H_403_13@OR

@H_403_13@NOT

sql 使用三值的布尔逻辑,空值代表"unknown"。 下面逻辑运算符的真值表:

@H_404_449@

a

b

a AND b

a OR b

TRUE

TRUE

TRUE

TRUE

TRUE

FALSE

FALSE

TRUE

TRUE

NULL

NULL

TRUE

FALSE

FALSE

FALSE

FALSE

FALSE

NULL

FALSE

NULL

NULL

NULL

NULL

NULL

a

NOT a

TRUE

FALSE

FALSE

TRUE

NULL

NULL

运算符 @H_403_13@AND OR 满足交换律。

7.2 比较运算符

7-1 列出了所有的比较运算符。

7-1 比较运算符

运算符

描述

@H_403_13@<

小于

@H_403_13@>

大于

@H_403_13@<=

小于或等于

@H_403_13@>=

大于或等于

@H_403_13@=

等于

@H_403_13@<> !=

不等于

注意: @H_403_13@!= 运算符在进行此法分析时会被自动转换成 <>。所以不可能让!= <> 实现不同的功能

比较运算符可以用于所有可以进行比较的操作的数据类型。所有比较运算符都是二元运算符,返回 @H_403_13@boolean 类型的结果,类似1 < 2 < 3” 这样的表达式是非法的。

除了比较运算符,还可以使用 @H_403_13@BETWEEN谓词。 a BETWEEN x AND y 等价于

@H_403_13@a >= x AND a <= y类似地,a NOT BETWEEN x AND y 等价于 a < x OR a > y

这两种形式之间没有什么区别。使用BETWEEN谓词时要注意,AND左边的操作数应该小于或等于它右边的操作数,否则可能会得到意想不到的结果,例如:

1select 3 between 4 and 2;

?column?

----------

f --结果为假

(1 row)

2select 3 between 2 and 4;

?column?

----------

t --结果为真

(1 row)

@H_403_13@ BETWEEN SYMMETRICBETWEEN功能类似,但是在使用BETWEEN SYMMETRIC时,AND运算符左边的操作数不一定要小于或者等于它右边的操作数。例如:

1select 3 between symmetric 2 and 4;

?column?

----------

t --结果为真

(1 row)

2select 3 between symmetric 4 and 2;

?column?

----------

t --结果为真

(1 row)

要检查一个值是否是空值,使用下面的语法:

@H_403_13@expression IS NULL

@H_403_13@expression IS NOT NULL

或者使用下面的等价的但并不标准的语法

@H_403_13@expression ISNULL

@H_403_13@expression NOTNULL

不能写成@H_403_13@expression = NULL因为两个空值是不相等的。空值代表一个未知的数值,因此无法决定两个未知的数值是否相等,这个规则符合sql 标准。

注意:如果表达式返回一个复合数据类型的值,只有在这个值是空值或者这个值的所有域都是空值的情况下,IS NULL才返回。只有在这个值不是空值和这个值的所有域的值都不是空值的情况下,IS NOT NULL才返回。这个规则是sql标准定义的。

如果有任何一个操作数是空值,普通的比较运算符的运算结果也是空值(表示"未知")。

还可以用@H_403_13@IS [NOT] DISTINCT FROM 来比较两个表达式的值,语法如下:

expression IS DISTINCT FROM expression

expression IS NOT DISTINCT FROM expression

如果两个表达式都不是空值,IS DISTINCT FROM功能与运算符@H_403_13@<>”完全相同。 但是,假如两个表达式的值都是空值,IS DISTINCT FROM将返回,而如果只有一个表达式的值是空值,那么它将返回

如果两个表达式都不是空值,IS NOT DISTINCT FROM功能与运算符@H_403_13@=”完全相同。但是,假如两个表达式的值都是空值,IS NOT DISTINCT FROM将返回,而如果只有一个表达式的值是空值,那么它将返回

可以使用下面的谓词来测试布尔类型的数值:

@H_403_13@expression IS TRUE

@H_403_13@expression IS NOT TRUE

@H_403_13@expression IS FALSE

@H_403_13@expression IS NOT FALSE

@H_403_13@expression IS UNKNOWN

@H_403_13@expression IS NOT UNKNOWN

上面的谓词总是返回真或假,从来不返回空值。空值输入被当做逻辑数值"未知"UNKNOWN。注意@H_403_13@IS UNKNOWNIS NOT UNKNOWN分别与IS NULLIS NOT NULL相同,只是输入表达式必须是布尔类型的。

7.3 数学函数和运算符

Postgresql为许多类型提供了数学运算符。7-2 列出了所有的数学运算符。

7-2. 数学运算符

运算符

描述

例子

结果

@H_403_13@+

@H_403_13@2 + 3

@H_403_13@5

@H_403_13@-

@H_403_13@2 - 3

@H_403_13@-1

@H_403_13@*

@H_403_13@2 * 3

@H_403_13@6

@H_403_13@/

除 (两个整数相除的结果如果不是整数,会将结果的小数部分去掉,只保留整数部分)

@H_403_13@14 / 2

@H_403_13@232

@H_403_13@324

@H_403_13@12

@H_403_13@21

@H_403_13@30

@H_403_13@%

模除 (求余)

@H_403_13@5 % 4

@H_403_13@1

@H_403_13@^

幂(指数运算)

@H_403_13@2.0 ^ 3.0

@H_403_13@8

@H_403_13@|/

平方根

@H_403_13@|/ 25.0

@H_403_13@5

@H_403_13@||/

立方根

@H_403_13@||/ 27.0

@H_403_13@3

@H_403_13@!

阶乘

@H_403_13@5 !

@H_403_13@120

@H_403_13@!!

阶乘 (前缀运算符)

@H_403_13@!! 5

@H_403_13@120

@H_403_13@@

绝对值

@H_403_13@@ -5.0

@H_403_13@5

@H_403_13@&

按位 AND

@H_403_13@91 & 15

@H_403_13@11

@H_403_13@|

按位OR

@H_403_13@32 | 3

@H_403_13@35

@H_403_13@#

按位XOR

@H_403_13@17 # 5

@H_403_13@20

@H_403_13@~

按位NOT

@H_403_13@~1

@H_403_13@-2

@H_403_13@<<

按位左移

@H_403_13@1 << 4

@H_403_13@16

@H_403_13@>>

按位右移

@H_403_13@8 >> 2

@H_403_13@2

按位运算运算符只能用于整数类型的数据,而其它的运算符可以用于所有的数值类型的数据。按位运算的运算符还可以用于位串类型 @H_403_13@bit @H_403_13@bit varying,如表7-3所示。

7-3列出了所有的数学函数。在该表中@H_403_13@dp表示double precision,除非特别指明,函数的返回值的数据类型和它的参数的数据类型相同。表7-4列出了这些数学函数的实例。处理 @H_403_13@double precision 数据的函数大多数是在操作系统的C函数库的基础上实现的。

7-3. 数学函数

函数

返回值类型

描述

@H_403_13@abs(x)

@H_403_13@x类型相同

绝对值

@H_403_13@cbrt(dp)

@H_403_13@Dp

立方根

@H_403_13@ceil(dp 或者 numeric)

与输入相同

不小于参数的最小的整数

@H_403_13@ceiling(dp or numeric)

与输入相同

不小于参数的最小整数(@H_403_13@ceil 的别名)

@H_403_13@degrees(dp)

@H_403_13@dp

把弧度转为角度

@H_403_13@exp(dp numeric)

与输入相同

自然指数

@H_403_13@floor(dp numeric)

与输入相同

不大于参数的最大整数

@H_403_13@ln(dp numeric)

与输入相同

自然对数

@H_403_13@log(dp numeric)

与输入相同

10 为底的对数

@H_403_13@log(b numeric,x numeric)

@H_403_13@numeric

指定底数的对数

@H_403_13@mod(y,x)

和参数类型相同

除法 y/x 的余数(模)

@H_403_13@pi()

@H_403_13@Dp

"π" 常量

@H_403_13@power(a dp,b dp)

@H_403_13@Dp

a b 次幂

@H_403_13@power(a numeric,b numeric)

@H_403_13@numeric

a b 次幂

@H_403_13@radians(dp)

@H_403_13@Dp

把角度转为弧度

@H_403_13@random()

@H_403_13@Dp

0.0 1.0 之间的随机数值

@H_403_13@round(dp 或者 numeric)

与输入相同

约为最接近参数的整数

@H_403_13@round(v numeric,s int)

@H_403_13@Numeric

约为最接近参数的有s位小数的数字

@H_403_13@setseed(dp)

@H_403_13@Int

为以后被调用 random()函数设置种子

@H_403_13@sign(dp 或者 numeric)

和输入相同

参数的符号(-1,+1

@H_403_13@sqrt(dp 或者 numeric)

和输入相同

平方根

@H_403_13@trunc(dp 或者 numeric)

和输入相同

去掉参数的小数位

@H_403_13@trunc(v numeric,s int)

@H_403_13@Numeric

将参数截断为含有 s位小数的数字

@H_403_13@width_bucket(op numeric,b1 numeric,b2 numeric,count in)

@H_403_13@Int

b1b2平分成count个取值区间,取值区间的编号从1开始。

如果b1>b2,则编号为0的取值区间表示的范围是(b1,正无穷大),编号为count+1的取值区间表示的范围是(负无穷大,b2)

如果b1<b2,则编号为0的取值区间表示的范围是(负无穷大,b1),编号为count+1的取值区间表示的范围是(b2,负无穷大)

op落在某个取值区间内,则返回该取值区间的编号。

@H_403_13@width_bucket(op dp,b1 dp,b2 dp,count int)

@H_403_13@Int

函数功能同上

7-4. 数学函数实例

例子

结果

@H_403_13@abs(-17.4)

@H_403_13@17.4

@H_403_13@cbrt(27.0)

@H_403_13@3

@H_403_13@ceil(-42.8)

@H_403_13@-42

@H_403_13@ceiling(-95.3)

@H_403_13@-95

@H_403_13@degrees(0.5)

@H_403_13@28.6478897565412

@H_403_13@exp(1.0)

@H_403_13@2.71828182845905

@H_403_13@floor(-42.8)

@H_403_13@-43

@H_403_13@ln(2.0)

@H_403_13@0.693147180559945

@H_403_13@log(100.0)

@H_403_13@2

@H_403_13@log(2.0,64.0)

@H_403_13@6.0000000000

@H_403_13@mod(9,4)

@H_403_13@1

@H_403_13@pi()

@H_403_13@3.14159265358979

@H_403_13@power(9.0,3.0)

@H_403_13@729

@H_403_13@power(9.0,3.0)

@H_403_13@729

@H_403_13@radians(45.0)

@H_403_13@0.785398163397448

@H_403_13@random()

每次调用的结果是随机的,例如0.453876388259232

@H_403_13@(1)round(42.4)

@H_403_13@(2)round(42.8)

@H_403_13@142

@H_403_13@243

@H_403_13@(1)round(42.4382,2)

@H_403_13@(2)round(42.4322,2)

@H_403_13@(1)42.44

@H_403_13@(2)42.43

@H_403_13@setseed(0.54823)

@H_403_13@1177314959

@H_403_13@sign(-8.4)

@H_403_13@-1

@H_403_13@sqrt(2.0)

@H_403_13@1.4142135623731

@H_403_13@trunc(42.8)

@H_403_13@42

@H_403_13@(1)trunc(42.4382,2)

@H_403_13@(2)trunc(42,2)

@H_403_13@(1)42.43

@H_403_13@(2)42.00

@H_403_13@(1)width_bucket(0.7,1,4,2);

@H_403_13@(2)width_bucket(10,2);

@H_403_13@(3)width_bucket(10,2);

@H_403_13@(3)width_bucket(3,2);

@H_403_13@(1)0

@H_403_13@(2)3

@H_403_13@(3)0

@H_403_13@(4)1

@H_403_13@width_bucket(0.35,0.024,10.06,5)

@H_403_13@1

7-5列出了所有的三角函数。所有三角函数的参数类型和返回值的类型都是double precision

7-5. 三角函数

@H_322_4403@

函数

描述

@H_403_13@acos(x)

反余弦

@H_403_13@asin(x)

反正弦

@H_403_13@atan(x)

反正切

@H_403_13@atan2(x,y)

正切 @H_403_13@y/x 的反函数

@H_403_13@cos(x)

余弦

@H_403_13@cot(x)

余切

@H_403_13@sin(x)

正弦

@H_403_13@tan(x)

正切

7.4 字符串函数和运算符

本节描述用处检查和处理字符串数值的函数和运算符。字符串类型包括类型 @H_403_13@charactercharacter varying @H_403_13@text/除非另外说明,所有下面列出的函数都可以处理这些数据类型,在处理@H_403_13@character 类型的时候,要注意它的自动空格填充机制对运算结果的影响。有些函数还可以处理位串类型的数据。表 7-6列出了SQL字符串函数和运算符,表 7-7列出了使用这些运算符的实例。

7-6. SQL字符串函数和运算符

函数或运算符

返回值类型

描述

String || string

text

连接两个字符串

@H_403_13@String || non-string

@H_403_13@non-string || string

@H_403_13@text

连接一个字符串和另一个非字符串类型的值

@H_403_13@bit_length(string)

@H_403_13@int

字符串包含的二进制位的个数

@H_403_13@char_length(string) character_length(string)

@H_403_13@int

字符串包含的字符的个数

@H_403_13@lower(string)

@H_403_13@text

将字符串转换成小写的格式

@H_403_13@octet_length(string)

@H_403_13@int

字符串包含的字节的个数

@H_403_13@overlay(string placing string from int [for int])

@H_403_13@text

替换字符串中的子串

@H_403_13@position(substring in string)

@H_403_13@int

查找子串在字符串中出现的位置

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

@H_403_13@text

从字符串中找出指定的子串。from int表示子串开始的位置,默认从1开始,例如from 2表示子串从@H_403_13@string的第二个字符开始for int表示子串的长度,默认取string从子串开始位置到string的末尾的所有子串,例如for 3表示子串的长度是3

@H_403_13@substring(string from pattern)

@H_403_13@text

从字符串中找出匹配POSIX正则表达式的子串,参见第7.7.3获取模式匹配的详细信息。

@H_403_13@substring(string from pattern for escape)

@H_403_13@text

从字符串中找出匹配正则表达式的子串,参见第7.7.3获取模式匹配的详细信息。

@H_403_13@trim([leading | trailing | both] [characters] from string)

@H_403_13@text

从字符串string的开始、末尾或者开始和末尾删除只包含指定的字符串@H_403_13@characters 中的字符的最长的字符串。

如果没有指定参数characters,则它的值默认是空格。

leading表示只删除字符串头部匹配的子串。

trailing 表示只删除字符串尾部匹配的子串。

both表示同时删除字符串头部和尾部匹配的子串。

@H_403_13@upper(string)

@H_403_13@text

将字符串转换成大写的格式

7-7. SQL字符串函数和运算符实例

例子

结果

'Post' || 'greSQL'

PostgreSQL

'Value: ' || 42

Value: 42

bit_length('jose')

32

char_length('jose')

4

lower('TOM')

tom

octet_length('jose')

4

Overlay('Txxxxas' placing 'hom' from 2 for 4)

Thomas

position('om' in 'Thomas')

3

(1)substring('Thomas' from 2 for 3)

(2)substring('Thomas' from 1 for 1)

(3)substring('Thomas' from 2)

(1)hom

(2)T

(3)homas

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

mas

substring('Thomas' from '%#"o_a#"_' for '#')

oma

(1)trim(both 'x' from 'xTomxx')

(2)trim(both 'xf' from 'xTomxxf');

(3)trim(both 'gxf' from 'xgTxTomxxf');

(4)trim(both from ' xgTxTomxxf ');

(5)trim(leading 'xf' from 'xTomxxf')

(1)Tom

(2)Tom

(3)TxTom

(4)xgTxTomxxf

(5)Tomxxf

upper('tom')

TOM

还有其它的字符串运算函数可以用,表7-8列出了这些函数。它们有些在内部用于实现7-6列出的SQL标准字符串函数。表7-9列出了表7-8中的函数实例。

7-8. 其它的字符串函数

函数

返回值类型

描述

@H_403_13@ascii(string)

@H_403_13@int

参数的第一个字符的ASCII编码。对于UTF8类型的字符串,返回它的第一个字符的UTF-8编码。对于其它的多字节编码类型的字符串,参数的第一个字符必须是ASCII类型的字符。

btrim(string text [,characters text])

text

从字符串string的开始和末尾删除只包含指定的字符串characters 中的字符的最长的字符串。如果没有指定参数characters,则它的值默认是空格。

chr(int)

text

返回指定的编码值对应的字符。参数的值不能是0。参数必须是合法的ASCII编码值或UTF8编码值。

convert(string bytea,src_encoding name,dest_encoding name)

bytea

将用 src_encoding编码的字符串转换成用dest_encoding编码的字符串。数据库中必须存在src_encodingdest_encoding的编码转换函数。表7-10列出了数据库中内置的合法的编码转换组合。

如果数据库中不存在 src_encodingest_encoding的编码转换函数,可以使用命令 CREATE CONVERSION创建一个。

convert_from(string bytea,src_encoding name)

text

将用 src_encoding编码的字符串转换成用数据库当前的编码类型编码的字符串。

convert_to(string text,dest_encoding name)

bytea

将字符串转换成以dest_encoding编码的格式。

decode(string text,type text)

bytea

从指定的格式的字符串中解码出二进制字符串。格式包括base64hexescape,详细信息参考下面的encode函数。

encode(data bytea,type text)

text

将二进制字符串转换成指定的格式字符串。一共有三种格式:base64hexescape。关于base64请参考RFC2045hex是十六进制格式。escape只是用/000来表示字节0,用两个反斜杠来表示一个反斜杠。

initcap(string)

text

首先将字符串用非字母和数字字符分割成多个子串,然后将每个子串的第一个字符大写,剩下的字符都小写。

length(string)

int

返回字符串中字符的个数

length(string bytea,encoding name )

int

返回字符串 bytea中的字符的个数,bytea的编码类型必须是encoding指定的。

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

text

用指定的字符串fill将字符串string填充成长度为 length的字符串。如果string的长度已经超过length,则将string截断成长度为length的字符串。

如果没有指定fill的值,则fill的值默认是空格。填充的字符串放在string的头部。

ltrim(string text [,characters text])

text

从字符串string的头部删除只包含指定的字符串characters 中的字符的最长的字符串。

如果没有指定参数characters,则它的值默认是空格。

md5(string)

text

计算字符串stringMD5哈希值。结果用十六进制的形式表示。

pg_client_encoding()

name

返回客户端的当前字符编码类型名称。

quote_ident(string text)

text

返回字符串string作为合法的SQL标识符的表示形式。

quote_literal(string text)

text

将字符串string转换成一个合法的SQL语句字符串常量的形式。

quote_literal(value anyelement)

text

value转换成字符串常量,value必须是一个数值。

regexp_matches(string text,pattern text [,flags text])

setof text[]

返回所有匹配指定的POSIX正则表达式的子串。参见第7.7.3节。

regexp_replace(string text,pattern text,replacement text [,flags text])

text

用字符串 replacement替换所有匹配指定的POSIX正则表达式的子串。参见7.7.3节。

regexp_split_to_array(string text,flags text ])

text[]

使用POSIX正则表达式作为分割符来分割字符串。参见第7.7.3节。

regexp_split_to_table(string text,flags text])

setof text

使用POSIX正则表达式作为分割符来分割字符串。参见第7.7.3节。

repeat(string text,number int)

text

将字符串string重复指定的次数。

replace(string text,from text,to text)

text

将字符串string中的所有子串from用子串to代替。

rpad(string text,fill text])

text

用指定的字符串fill将字符串string填充成长度为 length的字符串。如果string的长度已经超过length,则将string截断成长度为length的字符串。

如果没有指定fill的值,则fill的值默认是空格。填充的字符串放在string的尾部。

rtrim(string text [,characters text])

text

从字符串string的尾部删除只包含指定的字符串characters 中的字符的最长的字符串。

如果没有指定参characters,则它的值默认是空格。

split_part(string text,delimiter text,field int)

text

将字符串string用分割符delimiter分成多个域后,返回field指定的域(域的编号从1开始)。delimiter可以是一个字符串。

strpos(string,substring)

int

返回substringstring中的位置。

substr(string,from [,count] int)

text

从字符串string中取出指定的子串,如果没有指定参数count,则取出从from到字符串结尾这部分子串。与函数substring(string from from for count) 的功能相同。

to_ascii(string text [,encoding text])

text

将用 ASCII表示的字符串转换成其它编码类型的字符串(只支持LATIN1,LATIN2,LATIN9WIN1250 )

to_hex(number int or bigint)

text

将数字转换成十六进制的表示形式。

translate(string text,to text)

text

如果字符串string中的某个字符匹配字符串from的某个字符,则string中的这个字符将用字符串to中和from中的匹配字符对应的字符代替。字符串tofrom的长度应该相等,如果不相等,参见例子中的处理方式。

7-9. 其它的字符串函数实例

例子

结果

@H_403_13@(1)ascii('x')

@H_403_13@(2)ascii('yz')

@H_403_13@(3)ascii('我是')

@H_403_13@(1)120

@H_403_13@(2)121

@H_403_13@(3)25105

@H_403_13@(1)btrim('xyxtrimyyx','xy')

@H_403_13@(2)btrim('xgTomxxf','gxf');

@H_403_13@(1)trim

@H_403_13@(2)Tom

@H_403_13@(1)chr(65)

(2)chr(25105)

@H_403_13@(3)chr(25104)

@H_403_13@(1)A

@H_403_13@(2)

@H_403_13@(3)

@H_403_13@convert('text_in_utf8','UTF8','LATIN1')

ISO 8859-1格式表示的字符串@H_403_13@text_in_utf8

@H_403_13@convert_from('text_in_utf8','UTF8')

@H_403_13@数据库当前的编码类型表示的字符串text_in_utf8

@H_403_13@convert_to('some text','UTF8')

UTF8编码的字符串

@H_403_13@(1)decode(‘MTIzAAE=','base64')

@H_403_13@(2)decode('3132330001','hex')

@H_403_13@(1)123/000/001

@H_403_13@(2)123/000/001

@H_403_13@(1)encode(E'123//000//001','base64')

@H_403_13@(2)encode(E'123//000//001','hex')

@H_403_13@(1)MTIzAAE=

@H_403_13@(2)3132330001

@H_403_13@(1)initcap('hi THOMAS')

@H_403_13@(2)initcap('hh+jj');

@H_403_13@(1)Hi Thomas

@H_403_13@(2)Hh+Jj

@H_403_13@(1)length('jose')

@H_403_13@(2)length('我是谁')

@H_403_13@(1)4

@H_403_13@(2)3

@H_403_13@length('jose','UTF8')

@H_403_13@4

@H_403_13@(1)lpad('hi',5,'xy')

@H_403_13@(2)lpad('gggggg','h');

@H_403_13@(3)lpad('gg','h');

@H_403_13@(4)lpad('gg',4);

@H_403_13@(1)xyxhi

@H_403_13@(2)gggg

@H_403_13@(3)hhgg

@H_403_13@(4) gg,注意gg前面是两个空格。

@H_403_13@ltrim('zzzytrim','xyz')

@H_403_13@trim

@H_403_13@md5('abc')

@H_403_13@900150983cd24fb0 d6963f7d28e17f72

@H_403_13@pg_client_encoding()

@H_403_13@GB18030

@H_403_13@(1)quote_ident('Foo bar')

@H_403_13@(2)quote_ident('abc')

@H_403_13@(3)quote_ident('abc''');

@H_403_13@(1)"Foo bar"

@H_403_13@(2)abc

@H_403_13@(3) "abc'"

@H_403_13@(1)quote_literal('O/'Reilly')

@H_403_13@(2)quote_literal('abc//');

@H_403_13@(1)'O''Reilly'

@H_403_13@(2) E'abc//'

@H_403_13@quote_literal(42.5)

@H_403_13@'42.5'

@H_403_13@regexp_matches('foobarbequebaz','(bar)(beque)')

@H_403_13@{bar,beque}

@H_403_13@regexp_replace('Thomas','.[mN]a.','M')

@H_403_13@ThM

@H_403_13@regexp_split_to_array('hello world',E'//s+')

@H_403_13@{hello,world}

@H_403_13@regexp_split_to_table('hello world',E'//s+')

@H_403_13@hello

@H_403_13@world

(2 rows)

@H_403_13@repeat('Pg',4)

@H_403_13@PgPgPgPg

@H_403_13@replace('abcdefabcdef','cd','XX')

@H_403_13@abXXefabXXef

@H_403_13@rpad('hi','xy')

@H_403_13@hixyx

@H_403_13@rtrim('trimxxxx','x')

@H_403_13@trim

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

@H_403_13@(2)split_part('abc$de$f','$',3);

@H_403_13@(1)def

@H_403_13@(2)f

@H_403_13@(1)strpos('high','ig')

@H_403_13@(2)strpos('我是','')

@H_403_13@(1)2

@H_403_13@(2)2

@H_403_13@substr('alphabet',3,2)

@H_403_13@ph

@H_403_13@to_ascii('Karel')

@H_403_13@Karel

@H_403_13@to_hex(2147483647)

@H_403_13@7fffffff

@H_403_13@(1)translate('12345','14','ax')

@H_403_13@(2)translate('abcdef','abc','f')

@H_403_13@(3)translate('abcdef','fg')

@H_403_13@(1)a23x5

@H_403_13@(2)fdef

@H_403_13@(3)fgdef

7-10. 系统内置的编码类型转换

编码类型转换名称

源编码类型

目标编码类型

@H_403_13@ascii_to_mic

@H_403_13@sql_ASCII

@H_403_13@MULE_INTERNAL

@H_403_13@ascii_to_utf8

@H_403_13@sql_ASCII

@H_403_13@UTF8

@H_403_13@big5_to_euc_tw

@H_403_13@BIG5

@H_403_13@EUC_TW

@H_403_13@big5_to_mic

@H_403_13@BIG5

@H_403_13@MULE_INTERNAL

@H_403_13@big5_to_utf8

@H_403_13@BIG5

@H_403_13@UTF8

@H_403_13@euc_cn_to_mic

@H_403_13@EUC_CN

@H_403_13@MULE_INTERNAL

@H_403_13@euc_cn_to_utf8

@H_403_13@EUC_CN

@H_403_13@UTF8

@H_403_13@euc_jp_to_mic

@H_403_13@EUC_JP

@H_403_13@MULE_INTERNAL

@H_403_13@euc_jp_to_sjis

@H_403_13@EUC_JP

@H_403_13@SJIS

@H_403_13@euc_jp_to_utf8

@H_403_13@EUC_JP

@H_403_13@UTF8

@H_403_13@euc_kr_to_mic

@H_403_13@EUC_KR

@H_403_13@MULE_INTERNAL

@H_403_13@euc_kr_to_utf8

@H_403_13@EUC_KR

@H_403_13@UTF8

@H_403_13@euc_tw_to_big5

@H_403_13@EUC_TW

@H_403_13@BIG5

@H_403_13@euc_tw_to_mic

@H_403_13@EUC_TW

@H_403_13@MULE_INTERNAL

@H_403_13@euc_tw_to_utf8

@H_403_13@EUC_TW

@H_403_13@UTF8

@H_403_13@gb18030_to_utf8

@H_403_13@GB18030

@H_403_13@UTF8

@H_403_13@gbk_to_utf8

@H_403_13@GBK

@H_403_13@UTF8

@H_403_13@iso_8859_10_to_utf8

@H_403_13@LATIN6

@H_403_13@UTF8

@H_403_13@iso_8859_13_to_utf8

@H_403_13@LATIN7

@H_403_13@UTF8

@H_403_13@iso_8859_14_to_utf8

@H_403_13@LATIN8

@H_403_13@UTF8

@H_403_13@iso_8859_15_to_utf8

@H_403_13@LATIN9

@H_403_13@UTF8

@H_403_13@iso_8859_16_to_utf8

@H_403_13@LATIN10

@H_403_13@UTF8

@H_403_13@iso_8859_1_to_mic

@H_403_13@LATIN1

@H_403_13@MULE_INTERNAL

@H_403_13@iso_8859_1_to_utf8

@H_403_13@LATIN1

@H_403_13@UTF8

@H_403_13@iso_8859_2_to_mic

@H_403_13@LATIN2

@H_403_13@MULE_INTERNAL

@H_403_13@iso_8859_2_to_utf8

@H_403_13@LATIN2

@H_403_13@UTF8

@H_403_13@iso_8859_2_to_windows_1250

@H_403_13@LATIN2

@H_403_13@WIN1250

@H_403_13@iso_8859_3_to_mic

@H_403_13@LATIN3

@H_403_13@MULE_INTERNAL

@H_403_13@iso_8859_3_to_utf8

@H_403_13@LATIN3

@H_403_13@UTF8

@H_403_13@iso_8859_4_to_mic

@H_403_13@LATIN4

@H_403_13@MULE_INTERNAL

@H_403_13@iso_8859_4_to_utf8

@H_403_13@LATIN4

@H_403_13@UTF8

@H_403_13@iso_8859_5_to_koi8_r

@H_403_13@ISO_8859_5

@H_403_13@KOI8

@H_403_13@iso_8859_5_to_mic

@H_403_13@ISO_8859_5

@H_403_13@MULE_INTERNAL

@H_403_13@iso_8859_5_to_utf8

@H_403_13@ISO_8859_5

@H_403_13@UTF8

@H_403_13@iso_8859_5_to_windows_1251

@H_403_13@ISO_8859_5

@H_403_13@WIN1251

@H_403_13@iso_8859_5_to_windows_866

@H_403_13@ISO_8859_5

@H_403_13@WIN866

@H_403_13@iso_8859_6_to_utf8

@H_403_13@ISO_8859_6

@H_403_13@UTF8

@H_403_13@iso_8859_7_to_utf8

@H_403_13@ISO_8859_7

@H_403_13@UTF8

@H_403_13@iso_8859_8_to_utf8

@H_403_13@ISO_8859_8

@H_403_13@UTF8

@H_403_13@iso_8859_9_to_utf8

@H_403_13@LATIN5

@H_403_13@UTF8

@H_403_13@johab_to_utf8

@H_403_13@JOHAB

@H_403_13@UTF8

@H_403_13@koi8_r_to_iso_8859_5

@H_403_13@KOI8

@H_403_13@ISO_8859_5

@H_403_13@koi8_r_to_mic

@H_403_13@KOI8

@H_403_13@MULE_INTERNAL

@H_403_13@koi8_r_to_utf8

@H_403_13@KOI8

@H_403_13@UTF8

@H_403_13@koi8_r_to_windows_1251

@H_403_13@KOI8

@H_403_13@WIN1251

@H_403_13@koi8_r_to_windows_866

@H_403_13@KOI8

@H_403_13@WIN866

@H_403_13@mic_to_ascii

@H_403_13@MULE_INTERNAL

@H_403_13@sql_ASCII

@H_403_13@mic_to_big5

@H_403_13@MULE_INTERNAL

@H_403_13@BIG5

@H_403_13@mic_to_euc_cn

@H_403_13@MULE_INTERNAL

@H_403_13@EUC_CN

@H_403_13@mic_to_euc_jp

@H_403_13@MULE_INTERNAL

@H_403_13@EUC_JP

@H_403_13@mic_to_euc_kr

@H_403_13@MULE_INTERNAL

@H_403_13@EUC_KR

@H_403_13@mic_to_euc_tw

@H_403_13@MULE_INTERNAL

@H_403_13@EUC_TW

@H_403_13@mic_to_iso_8859_1

@H_403_13@MULE_INTERNAL

@H_403_13@LATIN1

@H_403_13@mic_to_iso_8859_2

@H_403_13@MULE_INTERNAL

@H_403_13@LATIN2

@H_403_13@mic_to_iso_8859_3

@H_403_13@MULE_INTERNAL

@H_403_13@LATIN3

@H_403_13@mic_to_iso_8859_4

@H_403_13@MULE_INTERNAL

@H_403_13@LATIN4

@H_403_13@mic_to_iso_8859_5

@H_403_13@MULE_INTERNAL

@H_403_13@ISO_8859_5

@H_403_13@mic_to_koi8_r

@H_403_13@MULE_INTERNAL

@H_403_13@KOI8

@H_403_13@mic_to_sjis

@H_403_13@MULE_INTERNAL

@H_403_13@SJIS

@H_403_13@mic_to_windows_1250

@H_403_13@MULE_INTERNAL

@H_403_13@WIN1250

@H_403_13@mic_to_windows_1251

@H_403_13@MULE_INTERNAL

@H_403_13@WIN1251

@H_403_13@mic_to_windows_866

@H_403_13@MULE_INTERNAL

@H_403_13@WIN866

@H_403_13@sjis_to_euc_jp

@H_403_13@SJIS

@H_403_13@EUC_JP

@H_403_13@sjis_to_mic

@H_403_13@SJIS

@H_403_13@MULE_INTERNAL

@H_403_13@sjis_to_utf8

@H_403_13@SJIS

@H_403_13@UTF8

@H_403_13@tcvn_to_utf8

@H_403_13@WIN1258

@H_403_13@UTF8

@H_403_13@uhc_to_utf8

@H_403_13@UHC

@H_403_13@UTF8

@H_403_13@utf8_to_ascii

@H_403_13@UTF8

@H_403_13@sql_ASCII

@H_403_13@utf8_to_big5

@H_403_13@UTF8

@H_403_13@BIG5

@H_403_13@utf8_to_euc_cn

@H_403_13@UTF8

@H_403_13@EUC_CN

@H_403_13@utf8_to_euc_jp

@H_403_13@UTF8

@H_403_13@EUC_JP

@H_403_13@utf8_to_euc_kr

@H_403_13@UTF8

@H_403_13@EUC_KR

@H_403_13@utf8_to_euc_tw

@H_403_13@UTF8

@H_403_13@EUC_TW

@H_403_13@utf8_to_gb18030

@H_403_13@UTF8

@H_403_13@GB18030

@H_403_13@utf8_to_gbk

@H_403_13@UTF8

@H_403_13@GBK

@H_403_13@utf8_to_iso_8859_1

@H_403_13@UTF8

@H_403_13@LATIN1

@H_403_13@utf8_to_iso_8859_10

@H_403_13@UTF8

@H_403_13@LATIN6

@H_403_13@utf8_to_iso_8859_13

@H_403_13@UTF8

@H_403_13@LATIN7

@H_403_13@utf8_to_iso_8859_14

@H_403_13@UTF8

@H_403_13@LATIN8

@H_403_13@utf8_to_iso_8859_15

@H_403_13@UTF8

@H_403_13@LATIN9

@H_403_13@utf8_to_iso_8859_16

@H_403_13@UTF8

@H_403_13@LATIN10

@H_403_13@utf8_to_iso_8859_2

@H_403_13@UTF8

@H_403_13@LATIN2

@H_403_13@utf8_to_iso_8859_3

@H_403_13@UTF8

@H_403_13@LATIN3

@H_403_13@utf8_to_iso_8859_4

@H_403_13@UTF8

@H_403_13@LATIN4

@H_403_13@utf8_to_iso_8859_5

@H_403_13@UTF8

@H_403_13@ISO_8859_5

@H_403_13@utf8_to_iso_8859_6

@H_403_13@UTF8

@H_403_13@ISO_8859_6

@H_403_13@utf8_to_iso_8859_7

@H_403_13@UTF8

@H_403_13@ISO_8859_7

@H_403_13@utf8_to_iso_8859_8

@H_403_13@UTF8

@H_403_13@ISO_8859_8

@H_403_13@utf8_to_iso_8859_9

@H_403_13@UTF8

@H_403_13@LATIN5

@H_403_13@utf8_to_johab

@H_403_13@UTF8

@H_403_13@JOHAB

@H_403_13@utf8_to_koi8_r

@H_403_13@UTF8

@H_403_13@KOI8

@H_403_13@utf8_to_sjis

@H_403_13@UTF8

@H_403_13@SJIS

@H_403_13@utf8_to_tcvn

@H_403_13@UTF8

@H_403_13@WIN1258

@H_403_13@utf8_to_uhc

@H_403_13@UTF8

@H_403_13@UHC

@H_403_13@utf8_to_windows_1250

@H_403_13@UTF8

@H_403_13@WIN1250

@H_403_13@utf8_to_windows_1251

@H_403_13@UTF8

@H_403_13@WIN1251

@H_403_13@utf8_to_windows_1252

@H_403_13@UTF8

@H_403_13@WIN1252

@H_403_13@utf8_to_windows_1253

@H_403_13@UTF8

@H_403_13@WIN1253

@H_403_13@utf8_to_windows_1254

@H_403_13@UTF8

@H_403_13@WIN1254

@H_403_13@utf8_to_windows_1255

@H_403_13@UTF8

@H_403_13@WIN1255

@H_403_13@utf8_to_windows_1256

@H_403_13@UTF8

@H_403_13@WIN1256

@H_403_13@utf8_to_windows_1257

@H_403_13@UTF8

@H_403_13@WIN1257

@H_403_13@utf8_to_windows_866

@H_403_13@UTF8

@H_403_13@WIN866

@H_403_13@utf8_to_windows_874

@H_403_13@UTF8

@H_403_13@WIN874

@H_403_13@windows_1250_to_iso_8859_2

@H_403_13@WIN1250

@H_403_13@LATIN2

@H_403_13@windows_1250_to_mic

@H_403_13@WIN1250

@H_403_13@MULE_INTERNAL

@H_403_13@windows_1250_to_utf8

@H_403_13@WIN1250

@H_403_13@UTF8

@H_403_13@windows_1251_to_iso_8859_5

@H_403_13@WIN1251

@H_403_13@ISO_8859_5

@H_403_13@windows_1251_to_koi8_r

@H_403_13@WIN1251

@H_403_13@KOI8

@H_403_13@windows_1251_to_mic

@H_403_13@WIN1251

@H_403_13@MULE_INTERNAL

@H_403_13@windows_1251_to_utf8

@H_403_13@WIN1251

@H_403_13@UTF8

@H_403_13@windows_1251_to_windows_866

@H_403_13@WIN1251

@H_403_13@WIN866

@H_403_13@windows_1252_to_utf8

@H_403_13@WIN1252

@H_403_13@UTF8

@H_403_13@windows_1256_to_utf8

@H_403_13@WIN1256

@H_403_13@UTF8

@H_403_13@windows_866_to_iso_8859_5

@H_403_13@WIN866

@H_403_13@ISO_8859_5

@H_403_13@windows_866_to_koi8_r

@H_403_13@WIN866

@H_403_13@KOI8

@H_403_13@windows_866_to_mic

@H_403_13@WIN866

@H_403_13@MULE_INTERNAL

@H_403_13@windows_866_to_utf8

@H_403_13@WIN866

@H_403_13@UTF8

@H_403_13@windows_866_to_windows_1251

@H_403_13@WIN866

@H_403_13@WIN

@H_403_13@windows_874_to_utf8

@H_403_13@WIN874

@H_403_13@UTF8

@H_403_13@euc_jis_2004_to_utf8

@H_403_13@EUC_JIS_2004

@H_403_13@UTF8

@H_403_13@ut8_to_euc_jis_2004

@H_403_13@UTF8

@H_403_13@EUC_JIS_2004

@H_403_13@shift_jis_2004_to_utf8

@H_403_13@SHIFT_JIS_2004

@H_403_13@UTF8

@H_403_13@ut8_to_shift_jis_2004

@H_403_13@UTF8

@H_403_13@SHIFT_JIS_2004

@H_403_13@euc_jis_2004_to_shift_jis_2004

@H_403_13@EUC_JIS_2004

@H_403_13@SHIFT_JIS_2004

@H_403_13@shift_jis_2004_to_euc_jis_2004

@H_403_13@SHIFT_JIS_2004

@H_403_13@EUC_JIS_2004

7.5 二进制字符串函数和运算符

本节描述处理@H_403_13@bytea类型的数值的函数和运算符。表7-11列出了这些函数和运算符,表7-12列出了这些函数和运算符的实例。表7-13中列出了其它的二进制字符串处理函数,这些函数有一些在内部使用,用来实现表7-11中列出的sql标准的二进制字符串函数的,表7-14列出了表7-13函数的实例。

7-11. 二进制字符串函数和运算符

函数

返回值类型

描述

@H_403_13@string || string

@H_403_13@bytea

连接两个二进制字符串

@H_403_13@get_bit(string,offset)

@H_403_13@int

二进制字符串中找出一个指定的二进制位

@H_403_13@get_byte(string,offset)

@H_403_13@int

二进制字符串中找出一个指定的字节

@H_403_13@octet_length(string)

@H_403_13@int

二进制字符串含有的字节的个数

@H_403_13@position(substring in string)

@H_403_13@int

二进制字符串中找出指定的子串出现的位置

@H_403_13@set_bit(string,offset,newvalue)

@H_403_13@bytea

二进制字符串中的某个二进制位设为指定的值

@H_403_13@set_byte(string,newvalue)

@H_403_13@bytea

二进制字符串中的某个字节设为指定的值

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

@H_403_13@bytea

二进制字符串中中找出指定的子串。from int表示子串开始的位置,默认从1开始,例如from 2表示子串从@H_403_13@string的第二个字符开始for int表示子串的长度,默认取string从子串开始位置到string的末尾的所有子串,例如for 3表示子串的长度是3

@H_403_13@trim([both] bytes from string)

@H_403_13@bytea

@H_403_13@从二进制字符串string的开始和末尾删除只包含指定的二进制字符串bytes中的字符的最长的二进制字符串。

7-12. 二进制字符串函数和运算符实例

例子

结果

@H_403_13@E'////Post'::bytea || E'//047gres//000'::bytea

@H_403_13@//Post'gres/000

@H_403_13@get_bit(E'Th//000omas'::bytea,45)

@H_403_13@1

@H_403_13@get_byte(E'Th//000omas'::bytea,4)

@H_403_13@109

@H_403_13@octet_length(E'jo//000se'::bytea)

@H_403_13@5

@H_403_13@position(E'//000om'::bytea in E'Th//000omas'::bytea)

@H_403_13@3

@H_403_13@set_bit(E'Th//000omas'::bytea,45,0)

@H_403_13@Th/000omAs

@H_403_13@set_byte(E'Th//000omas'::bytea,64)

@H_403_13@Th/000o@as

@H_403_13@substring(E'Th//000omas'::bytea from 2 for 3)

@H_403_13@h/000o

@H_403_13@trim(E'//000'::bytea from E'//000Tom//000'::bytea)

@H_403_13@Tom

7-13. 其它二进制字符串函数

函数

返回值类型

描述

@H_403_13@btrim(string bytea,bytes bytea)

bytea

@H_403_13@从二进制字符串string的开始和末尾删除只包含指定的二进制字符串bytes中的字符的最长的二进制字符串。

@H_403_13@decode(string text,type text)

bytea

从指定的格式的字符串中解码出二进制字符串。格式包括@H_403_13@base64hexescape,详细信息参考下面的encode函数

@H_403_13@encode(string bytea,type text)

text

将二进制字符串转换成指定的格式字符串。一共有三种格式:@H_403_13@base64hexescape。关于base64请参考RFC2045hex是十六进制格式。escape只是用/000来表示字节0,用两个反斜杠来表示一个反斜杠。

@H_403_13@length(string)

int

返回二进制字符串的长度。

@H_403_13@md5(string)

text

计算二进制字符串的MD5哈希值, 结果用十六进制数表示 。

7-14. 其它二进制字符串函数实例

例子

结果

@H_403_13@btrim(E'//000trim//000'::bytea,E'//000'::bytea)

@H_403_13@trim

@H_403_13@decode(E'123//000456','escape')

@H_403_13@123/000456

@H_403_13@encode(E'123//000456'::bytea,'escape')

@H_403_13@123/000456

@H_403_13@length(E'jo//000se'::bytea)

@H_403_13@5

@H_403_13@md5(E'Th//000omas'::bytea)

@H_403_13@8ab2d3c9689aaf18 b4958c334c82d8b1

7.6 位串函数和运算符

本节描述用于处理位串类型数据的函数和运算符。位串类型包括bit bit varying。对于位串类型的数据可以使用常用的比较运算符,表7-15列出了其它的运算符。运算符&|# 要求两个操作数的长度相等。在对位串类型的数据进行移位操作的时候,位串的长度不会发生变化。

7-15.位串运算符

运算符

描述

例子

结果

||

连接

B'10001' || B'011'

10001011

&

按位AND(与)

B'10001' & B'01101'

00001

|

按位OR(或)

B'10001' | B'01101'

11101

#

按位XOR(异或)

B'10001' # B'01101'

11100

~

按位NOT(非)

~ B'10001'

01110

<<

按位左移

B'10001' << 3

01000

>>

按位右移

B'10001' >> 2

00100

函数lengthbit_lengthoctet_lengthpositionsubstring除了用于字符串之外,也可以用于位串。

此外,可以在整数和位串类型之间进行转换。例如:

44::bit(10) 0000101100

44::bit(3) 100

cast(-44 as bit(12)) 111111010100

'1110'::bit(4)::integer 14

将整数转换成@H_403_13@bit(n)类型时,只会取整数的最右边的n个二进制位。注意,如果只是转换为 "bit",意思就是转换成 bit(1),结果只会取整数的最右边的那个二进制位。

猜你在找的Postgre SQL相关文章