您好,欢迎来到意榕旅游网。
搜索
您的当前位置:首页PostgreSQL函数和运算符(一)

PostgreSQL函数和运算符(一)

来源:意榕旅游网
PostgreSQL函数和运算符(⼀)

分类: 2011-03-17 09:14 3404⼈阅读 (1) ⽬录

PostgreSQL为内置数据类型提供了⼤量的函数和运算符。⽤户也可以定义⾃⼰的函数(参考第11章)。在psql中执⾏命令/df和/do可以分别列出可⽤的函数和运算符的列表。

本章中的⼤部分函数和运算符都是SQL标准中定义的,也有⼀部分是PostgreSQL⾃⼰扩展的。SQL标准定义了⼀些有特殊语法的字符串函数,这些函数使⽤特殊关键字⽽不是逗号来分隔参数,例如from和for。

逻辑运算符

常⽤的逻辑运算符有:

ANDORNOT

SQL 使⽤三值的布尔逻辑,空值代表\"unknown\"。 下⾯逻辑运算符的真值表:aba AND ba OR bTRUETRUETRUETRUETRUEFALSEFALSETRUETRUENULLNULLTRUEFALSEFALSEFALSEFALSEFALSENULLFALSENULLNULLNULLNULLNULLaNOT a TRUEFALSE FALSETRUE NULLNULL

运算符 AND 和 OR 满⾜交换律。

⽐较运算符

表 7-1 列出了所有的⽐较运算符。表7-1 ⽐较运算符运算符描述<⼩于>⼤于<=⼩于或等于>=⼤于或等于=等于<> 或 !=不等于

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

⽐较运算符可以⽤于所有可以进⾏⽐较的操作的数据类型。所有⽐较运算符都是⼆元运算符,返回 boolean类型的结果,类似“1 < 2 < 3” 这样的表达式是⾮法的。

除了⽐较运算符,还可以使⽤ BETWEEN谓词。 a BETWEEN x AND y 等价于

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

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

(1)select 3 between 4 and 2;

?column?---------- f --结果为假(1 row)

(2)select 3 between 2 and 4; ?column?---------- t --结果为真(1 row)

BETWEEN SYMMETRIC和BETWEEN的功能类似,但是在使⽤BETWEEN SYMMETRIC时,AND运算符左边的操作数不⼀定要⼩于或者等于它右边的操作数。例

如:(1) ?column?---------- t --结果为真(1 row)

(2)select 3 between symmetric 4 and 2; ?column?---------- t --结果为真(1 row)

要检查⼀个值是否是空值,使⽤下⾯的语法:

expression IS NULLexpression IS NOT NULL

或者使⽤下⾯的等价的但并不标准的语法

expression ISNULLexpression NOTNULL

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

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

如果有任何⼀个操作数是空值,普通的⽐较运算符的运算结果也是空值(表⽰\"未知\")。 还可以⽤IS [NOT] DISTINCT FROM 来⽐较两个表达式的值,语法如下:expression IS DISTINCT FROM expressionexpression IS NOT DISTINCT FROM expression

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

如果两个表达式都不是空值,IS NOT DISTINCT FROM的功能与运算符“=”完全相同。但是,假如两个表达式的值都是空值,IS NOTDISTINCT FROM将返回“真“,⽽如果只有⼀个表达式的值是空值,那么它将返回“假”。 可以使⽤下⾯的谓词来测试布尔类型的数值:

expression IS TRUEexpression IS NOT TRUEexpression IS FALSEexpression IS NOT FALSEexpression IS UNKNOWNexpression IS NOT UNKNOWN

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

数学函数和运算符

PostgreSQL为许多类型提供了数学运算符。表 7-2 列出了所有的数学运算符。表 7-2. 数学运算符运算符+加-减*乘/%^|/||/!!!@&|#~<<>>

按位运算运算符只能⽤于整数类型的数据,⽽其它的运算符可以⽤于所有的数值类型的数据。按位运算的运算符还可以⽤于位串类型 bit 和 bit varying,如表7-3所⽰。

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

函数

abs(x)cbrt(dp)

ceil(dp 或者 numeric)ceiling(dp or numeric)degrees(dp)exp(dp 或 numeric)

返回值类型和x类型相同Dp

与输⼊相同

与输⼊相同dp

描述

绝对值⽴⽅根

不⼩于参数的最⼩的整数

不⼩于参数的最⼩整数(ceil 的别名)把弧度转为⾓度描述

例⼦结果2 + 352 - 3-12 * 36

(1)4 / 2(1)2

除 (两个整数相除的结果如果不是整数,会将结果的⼩数部分去掉,只保留整数部分)(2)3/2(2)1模除 (求余)幂(指数运算)平⽅根⽴⽅根阶乘

阶乘 (前缀运算符)绝对值按位 AND按位OR按位XOR按位NOT按位左移按位右移

(3)2/4(3)05 % 412.0 ^ 3.08|/ 25.05||/ 27.035 !120!! 5120@ -5.0591 & 151132 | 33517 # 520~1-21 << 4168 >> 22

与输⼊相⾃然指数

exp(dp 或 numeric)

函数

floor(dp 或 numeric)ln(dp 或 numeric)log(dp 或 numeric)log(b numeric, x numeric)mod(y, x)

pi()

power(a dp, b dp)

power(a numeric, b numeric)radians(dp)random()

round(dp 或者 numeric)round(v numeric, s int)setseed(dp)

sign(dp 或者 numeric)sqrt(dp 或者 numeric)trunc(dp 或者 numeric)trunc(v numeric, s int)

与输⼊相返回值类同

与输⼊相型同

与输⼊相同

与输⼊相同

numeric和参数类型相同DpDp

numericDpDp

与输⼊相同

NumericInt

和输⼊相同

和输⼊相同

和输⼊相同

Numeric

⾃然指数

描述

不⼤于参数的最⼤整数⾃然对数10 为底的对数指定底数的对数除法 y/x 的余数(模)\"π\" 常量

求a的 b 次幂求a的 b 次幂把⾓度转为弧度

0.0 到 1.0 之间的随机数值约为最接近参数的整数

约为最接近参数的有s位⼩数的数字为以后被调⽤的 random()函数设置种⼦参数的符号(-1, 0, +1)平⽅根

去掉参数的⼩数位

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

将b1和b2平分成count个取值区间,取值区间的编号从1开始。

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

width_bucket(op numeric, b1 numeric, b2

Int

numeric, count in)

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

width_bucket(op dp, b1 dp, b2 dp, count

Int

int)

表7-4. 数学函数实例

例⼦

abs(-17.4)cbrt(27.0)ceil(-42.8)ceiling(-95.3)degrees(0.5)exp(1.0)floor(-42.8)ln(2.0)log(100.0)log(2.0, 64.0)mod(9,4)pi()

power(9.0, 3.0)power(9.0, 3.0)radians(45.0)random()

(1)round(42.4)(2)round(42.8)

(1)round(42.4382, 2)(2)round(42.4322,2)setseed(0.54823)sign(-8.4)

函数功能同上

结果

17.4

3-42-95

28.64788975654122.71828182845905-43

0.6931471805599452

6.00000000001

3.14159265358979729729

0.785398163397448

每次调⽤的结果是随机的,例如0.453876388259232(1)42(2)43(1)42.44(2)42.431177314959-1

sign(-8.4)

例⼦sqrt(2.0)

trunc(42.8)

(1)trunc(42.4382, 2)(2)trunc(42,2)

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

(2)width_bucket(10,1,4,2);

(3)width_bucket(10,4,1,2);

-1

1.414213562373142

(1)42.43(2)42.00(1)0 (2)3 (3)0

结果

(3)width_bucket(3,4,1,2);(4)1width_bucket(0.35, 0.024, 10.06, 5)1

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

函数描述acos(x)反余弦asin(x)反正弦atan(x)反正切

atan2(x, y)正切 y/x 的反函数cos(x)余弦cot(x)余切sin(x)正弦tan(x)正切

字符串函数和运算符

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

返回值类型

texttext

函数或运算符

String || string

String || non-string 或

描述

连接两个字符串

连接⼀个字符串和另⼀个⾮字符串类型的值

non-string || string

bit_length(string)

int

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

char_length(string)或character_length(string)int字符串包含的字符的个数lower(string)text将字符串转换成⼩写的格式octet_length(string)int字符串包含的字节的个数overlay(string placing string from int [for

text替换字符串中的⼦串

int])

position(substring in string)int查找⼦串在字符串中出现的位置

从字符串中找出指定的⼦串。from int表⽰⼦串开始的位置,默认从1开始,例如from 2表⽰⼦串text从string的第⼆个字符开始。for int表⽰⼦串的长度,默认取string从⼦串开始位置到string的末尾的所有substring(string [from int] [for int])

⼦串,例如for 3表⽰⼦串的长度是3。

substring(string from pattern)text从字符串中找出匹配POSIX正则表达式的⼦串,参见第7.7.3节获取模式匹配的详细信息。substring(string from pattern forescape)text从字符串中找出匹配正则表达式的⼦串,参见第7.7.3节获取模式匹配的详细信息。

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

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

trim([leading | trailing | both]

text

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

text返回leading表⽰只删除字符串头部匹配的⼦串。

函数或运算符

值类

型trailing 表⽰只删除字符串尾部匹配的⼦串。

描述

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

upper(string)

text

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

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

例⼦

结果

'Post' || 'greSQL'PostgreSQL'Value: ' || 42Value: 42bit_length('jose')32char_length('jose')4lower('TOM')tomoctet_length('jose')4

Overlay('Txxxxas' placing 'hom' from 2 for 4)Thomasposition('om' in 'Thomas')3(1)substring('Thomas' from 2 for 3)(1)hom(2)substring('Thomas' from 1 for 1)

(2)T

(3)substring('Thomas' from 2)(3)homassubstring('Thomas' from '...$')massubstring('Thomas' from '%#\"o_a#\"_' for '#')oma(1)trim(both 'x' from 'xTomxx')

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

(1)Tom(2)Tom(3)TxTom(4)xgTxTomxxf(5)Tomxxf

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

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

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

TOM

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

函数

返回值类型

描述

ascii(string)

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

从字符串string的开始和末尾删除只包含指定的字符串characters 中的字符的最长的字符串。如果没有指定参数

btrim(string text [, characterstext])text

chr(int)

characters,则它的值默认是空格。

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

将⽤ src_encoding编码的字符串转换成⽤dest_encoding编码的字符串。数据库中必须存在src_encoding到dest_encoding的编码

如果数据库中不存在 src_encoding到est_encoding的编码转换函数,可以使⽤命令 CREATE CONVERSION创建⼀个。

convert(string bytea, src_encoding转换函数。表7-10列出了数据库中内置的合法的编码转换组合。

bytea

name, dest_encoding name)

convert_from(string bytea,src_encoding name)convert_to(string text,dest_encoding name)decode(string text, type text)encode(data bytea, type text)

textbyteabyteatext

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

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

从指定的格式的字符串中解码出⼆进制字符串。格式包括base64、hex和escape,详细信息参考下⾯的encode函

数。

将⼆进制字符串转换成指定的格式字符串。⼀共有三种格式:base64、hex和escape。关于base64请参考

RFC2045,hex是⼗六进制格式。escape只是⽤/000来表⽰字节0,⽤两个反斜杠来表⽰⼀个反斜杠。

⾸先将字符串⽤⾮字母和数字字符分割成多个⼦串,然后将每个⼦串的第⼀个字符⼤写,剩下的字符都⼩写。

initcap(string)

text

initcap(string)length(string)函数

length(string bytea, encoding name

)

text

返回

int返回字符串中字符的个数值类描述

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

int

text

lpad(string text, length int

[,fill text])

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

长度为length的字符串。

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

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

ltrim(string text [, characterstext])text

pattern text [, flags text])

regexp_replace(string text, patterntext, replacement text [, flags

text])

regexp_split_to_array(string text,

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

pattern text [, flags text])repeat(string text, number int)replace(string text, from text, to

text)

rpad(string text, length int

[,fill text])

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

md5(string)text计算字符串string的MD5哈希值。结果⽤⼗六进制的形式表⽰。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,setof返回所有匹配指定的POSIX正则表达式的⼦串。参见第7.7.3节。

text[]texttext[]setof

texttext

⽤字符串 replacement替换所有匹配指定的POSIX正则表达式的⼦串。参见第7.7.3节。使⽤POSIX正则表达式作为分割符来分割字符串。参见第7.7.3节。使⽤POSIX正则表达式作为分割符来分割字符串。参见第7.7.3节。

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

text将字符串string中的所有⼦串from⽤⼦串to代替。

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

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

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

rtrim(string text [, characterstext])text

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

split_part(string text, delimiter text,

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

field int)

strpos(string, substring)

substr(string, from [, count] int)

to_ascii(string text[, encodingtext])to_hex(number int or bigint)

返回substring在string中的位置。

从字符串string中取出指定的⼦串,如果没有指定参数count,则取出从from到字符串结尾这部分⼦串。与text

函数substring(string from from for count) 的功能相同。

将⽤ ASCII表⽰的字符串转换成其它编码类型的字符串(只⽀持LATIN1, LATIN2, LATIN9和WIN1250 )。text

inttext

将数字转换成⼗六进制的表⽰形式。

如果字符串string中的某个字符匹配字符串from的某个字符,则string中的这个字符将⽤字符串to中和fromtranslate(string text, from text, to

text

text)中的匹配字符对应的字符代替。字符串to和from的长度应该相等,如果不相等,参见例⼦中的处理⽅式。表 7-9. 其它的字符串函数实例例⼦

(1)ascii('x')(2)ascii('yz')

(3)ascii('我是')

(1)btrim('xyxtrimyyx', 'xy')(2)btrim('xgTomxxf','gxf');(1)chr(65)(2)chr(25105)

(3)chr(25104)

convert('text_in_utf8', 'UTF8', 'LATIN1')convert_from('text_in_utf8', 'UTF8')convert_to('some text', 'UTF8')(1)decode(‘MTIzAAE=', 'base64')(2)decode('3132330001','hex')

(1)encode(E'123//000//001', 'base64')(2)encode(E'123//000//001', 'hex')(1)initcap('hi THOMAS')(2)initcap('hh+jj');(1)length('jose')

结果

(1)120(2)121(3)25105(1)trim(2)Tom(1)A(2)我(3)成

⽤ISO 8859-1格式表⽰的字符串text_in_utf8

⽤数据库当前的编码类型表⽰的字符串text_in_utf8

⽤UTF8编码的字符串

(1)123/000/001(2)123/000/001(1)MTIzAAE=(2)3132330001(1)Hi Thomas(2)Hh+Jj(1)4

(1)length('jose')(1)4

例⼦

(2)length('我是谁')length('jose', 'UTF8')(1)lpad('hi', 5, 'xy')(2)lpad('gggggg',4,'h');(3)lpad('gg',4,'h');(4)lpad('gg',4);

ltrim('zzzytrim', 'xyz')md5('abc')

pg_client_encoding()(1)quote_ident('Foo bar')(2)quote_ident('abc')(3)quote_ident('abc''');(1)quote_literal('O/'Reilly')

结果

(2)34

(1)xyxhi(2)gggg(3)hhgg

(4) gg,注意gg前⾯是两个空格。trim

900150983cd24fb0 d6963f7d28e17f72 GB18030(1)\"Foo bar\"(2)abc(3) \"abc'\"(1)'O''Reilly'

(2)quote_literal('abc//');(2) E'abc//'quote_literal(42.5)'42.5'

regexp_matches('foobarbequebaz', '(bar)(beque)'){bar,beque}regexp_replace('Thomas', '.[mN]a.', 'M')ThMregexp_split_to_array('hello world', E'//s+')regexp_split_to_table('hello world', E'//s+')

{hello,world}helloworld

(2 rows)

repeat('Pg', 4)

replace('abcdefabcdef', 'cd', 'XX')rpad('hi', 5, 'xy')rtrim('trimxxxx', 'x')

(1)split_part('abc~@~def~@~ghi', '~@~', 2)(2)split_part('abc$de$f','$',3);(1)strpos('high', 'ig')

(2)strpos('我是','是')substr('alphabet', 3, 2)to_ascii('Karel')

to_hex(2147483647)

(1)translate('12345', '14', 'ax')(2)translate('abcdef','abc','f')(3)translate('abcdef','abc','fg')

PgPgPgPgabXXefabXXefhixyxtrim(1)def(2)f(1)2(2)2phKarel7fffffff(1)a23x5(2)fdef(3)fgdef

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

源编码类型⽬标编码类型

ascii_to_micascii_to_utf8big5_to_euc_twbig5_to_micbig5_to_utf8euc_cn_to_miceuc_cn_to_utf8euc_jp_to_miceuc_jp_to_sjiseuc_jp_to_utf8euc_kr_to_miceuc_kr_to_utf8euc_tw_to_big5euc_tw_to_miceuc_tw_to_utf8gb18030_to_utf8gbk_to_utf8

iso_8859_10_to_utf8iso_8859_13_to_utf8iso_8859_14_to_utf8iso_8859_15_to_utf8iso_8859_16_to_utf8iso_8859_1_to_miciso_8859_1_to_utf8iso_8859_2_to_miciso_8859_2_to_utf8

iso_8859_2_to_windows_1250iso_8859_3_to_miciso_8859_3_to_utf8iso_8859_4_to_miciso_8859_4_to_utf8iso_8859_5_to_koi8_r

SQL_ASCII

SQL_ASCIIBIG5BIG5BIG5EUC_CNEUC_CNEUC_JPEUC_JPEUC_JPEUC_KREUC_KREUC_TWEUC_TWEUC_TWGB18030GBKLATIN6LATIN7LATIN8LATIN9LATIN10LATIN1LATIN1LATIN2LATIN2LATIN2LATIN3LATIN3LATIN4LATIN4ISO_8859_5

MULE_INTERNAL

UTF8EUC_TW

MULE_INTERNALUTF8

MULE_INTERNALUTF8

MULE_INTERNALSJISUTF8

MULE_INTERNALUTF8BIG5

MULE_INTERNALUTF8UTF8UTF8UTF8UTF8UTF8UTF8UTF8

MULE_INTERNALUTF8

MULE_INTERNALUTF8WIN1250

MULE_INTERNALUTF8

MULE_INTERNALUTF8KOI8

iso_8859_5_to_koi8_riso_8859_5_to_miciso_8859_5_to_utf8

iso_8859_5_to_windows_1251iso_8859_5_to_windows_866iso_8859_6_to_utf8iso_8859_7_to_utf8iso_8859_8_to_utf8iso_8859_9_to_utf8johab_to_utf8

koi8_r_to_iso_8859_5koi8_r_to_mickoi8_r_to_utf8

koi8_r_to_windows_1251koi8_r_to_windows_866mic_to_asciimic_to_big5ISO_8859_5KOI8

源编码类型⽬标编码类型ISO_8859_5MULE_INTERNALISO_8859_5UTF8ISO_8859_5WIN1251ISO_8859_5WIN866ISO_8859_6UTF8ISO_8859_7UTF8ISO_8859_8UTF8LATIN5UTF8JOHABUTF8KOI8ISO_8859_5KOI8MULE_INTERNALKOI8UTF8KOI8WIN1251KOI8WIN866MULE_INTERNALSQL_ASCIIMULE_INTERNALBIG5

mic_to_euc_cnMULE_INTERNALEUC_CNmic_to_euc_jpMULE_INTERNALEUC_JPmic_to_euc_krMULE_INTERNALEUC_KRmic_to_euc_twMULE_INTERNALEUC_TWmic_to_iso_8859_1MULE_INTERNALLATIN1mic_to_iso_8859_2MULE_INTERNALLATIN2mic_to_iso_8859_3MULE_INTERNALLATIN3mic_to_iso_8859_4MULE_INTERNALLATIN4mic_to_iso_8859_5MULE_INTERNALISO_8859_5mic_to_koi8_rMULE_INTERNALKOI8mic_to_sjisMULE_INTERNALSJISmic_to_windows_1250MULE_INTERNALWIN1250mic_to_windows_1251MULE_INTERNALWIN1251mic_to_windows_866MULE_INTERNALWIN866sjis_to_euc_jpSJISEUC_JPsjis_to_micSJISMULE_INTERNALsjis_to_utf8SJISUTF8tcvn_to_utf8WIN1258UTF8uhc_to_utf8UHCUTF8utf8_to_asciiUTF8SQL_ASCIIutf8_to_big5UTF8BIG5utf8_to_euc_cnUTF8EUC_CNutf8_to_euc_jpUTF8EUC_JPutf8_to_euc_krUTF8EUC_KRutf8_to_euc_twUTF8EUC_TWutf8_to_gb18030UTF8GB18030utf8_to_gbkUTF8GBKutf8_to_iso_8859_1UTF8LATIN1utf8_to_iso_8859_10UTF8LATIN6utf8_to_iso_8859_13UTF8LATIN7utf8_to_iso_8859_14UTF8LATIN8utf8_to_iso_8859_15UTF8LATIN9utf8_to_iso_8859_16UTF8LATIN10utf8_to_iso_8859_2UTF8LATIN2utf8_to_iso_8859_3UTF8LATIN3utf8_to_iso_8859_4UTF8LATIN4utf8_to_iso_8859_5UTF8ISO_8859_5utf8_to_iso_8859_6UTF8ISO_8859_6utf8_to_iso_8859_7UTF8ISO_8859_7utf8_to_iso_8859_8UTF8ISO_8859_8utf8_to_iso_8859_9UTF8LATIN5utf8_to_johabUTF8JOHAButf8_to_koi8_rUTF8KOI8utf8_to_sjisUTF8SJISutf8_to_tcvnUTF8WIN1258utf8_to_uhcUTF8UHCutf8_to_windows_1250UTF8WIN1250utf8_to_windows_1251UTF8WIN1251utf8_to_windows_1252UTF8WIN1252utf8_to_windows_1253UTF8WIN1253utf8_to_windows_1254UTF8WIN1254utf8_to_windows_1255UTF8WIN1255utf8_to_windows_1256UTF8WIN1256utf8_to_windows_1257UTF8WIN1257utf8_to_windows_866UTF8WIN866utf8_to_windows_874UTF8WIN874windows_1250_to_iso_8859_2WIN1250LATIN2windows_1250_to_micWIN1250MULE_INTERNALwindows_1250_to_utf8WIN1250UTF8windows_1251_to_iso_8859_5WIN1251ISO_8859_5windows_1251_to_koi8_rWIN1251KOI8windows_1251_to_micWIN1251MULE_INTERNALwindows_1251_to_utf8WIN1251UTF8windows_1251_to_windows_866WIN1251WIN866windows_1252_to_utf8WIN1252UTF8windows_1256_to_utf8WIN1256UTF8windows_866_to_iso_8859_5windows_866_to_koi8_r

WIN866WIN866

ISO_8859_5KOI8

windows_866_to_koi8_rWIN866源编码类型windows_866_to_micWIN866windows_866_to_utf8WIN866windows_866_to_windows_1251WIN866windows_874_to_utf8WIN874euc_jis_2004_to_utf8EUC_JIS_2004ut8_to_euc_jis_2004UTF8shift_jis_2004_to_utf8SHIFT_JIS_2004ut8_to_shift_jis_2004UTF8

euc_jis_2004_to_shift_jis_2004EUC_JIS_2004KOI8⽬标编码类型MULE_INTERNALUTF8WINUTF8UTF8

EUC_JIS_2004UTF8

SHIFT_JIS_2004SHIFT_JIS_2004

shift_jis_2004_to_euc_jis_2004SHIFT_JIS_2004EUC_JIS_2004

⼆进制字符串函数和运算符

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

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

返回

函数值类描述

string || stringbytea连接两个⼆进制字符串get_bit(string, offset)int从⼆进制字符串中找出⼀个指定的⼆进制位get_byte(string, offset)int从⼆进制字符串中找出⼀个指定的字节octet_length(string)int⼆进制字符串含有的字节的个数position(substring in string)int从⼆进制字符串中找出指定的⼦串出现的位置set_bit(string, offset,newvalue)bytea将⼆进制字符串中的某个⼆进制位设为指定的值set_byte(string, offset,newvalue)bytea将⼆进制字符串中的某个字节设为指定的值

从⼆进制字符串中中找出指定的⼦串。from int表⽰⼦串开始的位置,默认从1开始,例如from 2表⽰⼦

substring(string [from int] [for

bytea串从string的第⼆个字符开始。for int表⽰⼦串的长度,默认取string从⼦串开始位置到string的末尾的所有⼦

int])

串,例如for 3表⽰⼦串的长度是3。

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

trim([both] bytes from string)bytea

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

例⼦结果

E'////Post'::bytea || E'//047gres//000'::bytea//Post'gres/000get_bit(E'Th//000omas'::bytea, 45)1get_byte(E'Th//000omas'::bytea, 4)109octet_length(E'jo//000se'::bytea)5position(E'//000om'::bytea in E'Th//000omas'::bytea)3set_bit(E'Th//000omas'::bytea, 45, 0)Th/000omAsset_byte(E'Th//000omas'::bytea, 4, 64)Th/000o@assubstring(E'Th//000omas'::bytea from 2 for 3)h/000otrim(E'//000'::bytea from E'//000Tom//000'::bytea)Tom

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

函数

返回值

类型

描述

从⼆进制字符串string的开始和末尾删除只包含指定的⼆进制字符串bytes中的字符的最长的⼆进制字符串。从指定的格式的字符串中解码出⼆进制字符串。格式包括base64、hex和escape,详细信息参考下⾯的encode函数。将⼆进制字符串转换成指定的格式字符串。⼀共有三种格式:base64、hex和escape。关于base64请参考RFC2045,hex是

⼗六进制格式。escape只是⽤/000来表⽰字节0,⽤两个反斜杠来表⽰⼀个反斜杠。

btrim(string bytea,

bytea

bytes bytea)

decode(string text,

bytea

type text)

encode(string

text

bytea, type text)length(string)intmd5(string)text

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

计算⼆进制字符串的MD5哈希值, 结果⽤⼗六进制数表⽰ 。

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

例⼦

btrim(E'//000trim//000'::bytea, E'//000'::bytea)trimdecode(E'123//000456', 'escape')123/000456encode(E'123//000456'::bytea, 'escape')123/000456

结果

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

例⼦length(E'jo//000se'::bytea)

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

123/000456

结果5

8ab2d3c9689aaf18 b4958c334c82d8b1

位串函数和运算符

本节描述⽤于处理位串类型数据的函数和运算符。位串类型包括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' << 301000>>按位右移B'10001' >> 200100

函数length、bit_length、octet_length、position和substring除了⽤于字符串之外,也可以⽤于位串。

此外,可以在整数和位串类型之间进⾏转换。例如:44::bit(10) 000010110044::bit(3) 100

cast(-44 as bit(12)) 111111010100'1110'::bit(4)::integer 14

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

http://blog.csdn.net/neo_liu0000/article/details/6255303

因篇幅问题不能全部显示,请点此查看更多更全内容

Copyright © 2019- yrrf.cn 版权所有 赣ICP备2024042794号-2

违法及侵权请联系:TEL:199 1889 7713 E-MAIL:2724546146@qq.com

本站由北京市万商天勤律师事务所王兴未律师提供法律服务