设为首页 收藏本站
查看: 1146|回复: 0

[经验分享] PostgreSQL函数和运算符(一)

[复制链接]

尚未签到

发表于 2016-11-21 09:20:34 | 显示全部楼层 |阅读模式
PostgreSQL函数和运算符(一)

分类: PostgreSQL2011-03-17 09:14 3404人阅读 评论(1) 收藏 举报
postgresqlstringwindowsencoding正则表达式hex
  目录(?)[+]

  PostgreSQL为内置数据类型提供了大量的函数和运算符。用户也可以定义自己的函数(参考第11章)。在psql中执行命令/df和/do可以分别列出可用的函数和运算符的列表。
  本章中的大部分函数和运算符都是SQL标准中定义的,也有一部分是PostgreSQL自己扩展的。SQL标准定义了一些有特殊语法的字符串函数,这些函数使用特殊关键字而不是逗号来分隔参数,例如from和for。
7.1 逻辑运算符
     常用的逻辑运算符有:
  AND
  OR
  NOT
     SQL 使用三值的布尔逻辑,空值代表"unknown"。 下面逻辑运算符的真值表:
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
  
        运算符 AND 和 OR 满足交换律。
  
7.2 比较运算符
  表 7-1 列出了所有的比较运算符。
  表7-1 比较运算符
  运算符
  描述
  <
  小于
  >
  大于
  <=
  小于或等于
  >=
  大于或等于
  =
  等于
  <> 或 !=
  不等于
  注意: != 运算符在进行此法分析时会被自动转换成 <>。所以不可能让!= 和 <> 实现不同的功能。
  比较运算符可以用于所有可以进行比较的操作的数据类型。所有比较运算符都是二元运算符,返回 boolean类型的结果,类&#20284;“1 < 2 < 3” 这样的表达式是非法的。
  除了比较运算符,还可以使用 BETWEEN谓词。 a BETWEEN x AND y 等价于
  a >= x AND a <= y。类&#20284;地,a NOTBETWEEN 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的功能类&#20284;,但是在使用BETWEENSYMMETRIC时,AND运算符左边的操作数不一定要小于或者等于它右边的操作数。例如:
  (1)select3 between symmetric 2 and 4;
  ?column?
  ----------
  t                --结果为真
  (1 row)
  (2)select 3 between symmetric 4 and 2;
  ?column?
  ----------
  t               --结果为真
  (1 row)
  要检查一个&#20540;是否是空&#20540;,使用下面的语法:
  expression IS NULL
  expression IS NOT NULL
  或者使用下面的等价的但并不标准的语法
  expression ISNULL
  expression NOTNULL
  不能写成expression = NULL,因为两个空&#20540;是不相等的。空&#20540;代表一个未知的数&#20540;,因此无法决定两个未知的数&#20540;是否相等,这个规则符合SQL 标准。
  注意:如果表达式返回一个复合数据类型的&#20540;,只有在这个&#20540;是空&#20540;或者这个&#20540;的所有域都是空&#20540;的情况下,IS NULL才返回“真”。只有在这个&#20540;不是空&#20540;和这个&#20540;的所有域的&#20540;都不是空&#20540;的情况下,IS NOT NULL才返回“真”。这个规则是SQL标准定义的。
  如果有任何一个操作数是空&#20540;,普通的比较运算符的运算结果也是空&#20540;(表示&quot;未知&quot;)。
  还可以用IS [NOT] DISTINCT FROM 来比较两个表达式的&#20540;,语法如下:
  expression IS DISTINCT FROM expression
  expression IS NOT DISTINCT FROM expression
  如果两个表达式都不是空&#20540;,IS DISTINCT FROM的功能与运算符“<>”完全相同。 但是,假如两个表达式的&#20540;都是空&#20540;,IS DISTINCT FROM将返回“假”,而如果只有一个表达式的&#20540;是空&#20540;,那么它将返回“真”。
  如果两个表达式都不是空&#20540;,IS NOT DISTINCT FROM的功能与运算符“=”完全相同。但是,假如两个表达式的&#20540;都是空&#20540;,IS NOT DISTINCT FROM将返回“真“,而如果只有一个表达式的&#20540;是空&#20540;,那么它将返回“假”。
  可以使用下面的谓词来测试布尔类型的数&#20540;:
  expression IS TRUE
  expression IS NOT TRUE
  expression IS FALSE
  expression IS NOT FALSE
  expression IS UNKNOWN
  expression IS NOT UNKNOWN
  上面的谓词总是返回真或假,从来不返回空&#20540;。空&#20540;输入被当做逻辑数&#20540;&quot;未知&quot;(UNKNOWN)。注意IS UNKNOWN和ISNOT UNKNOWN分别与IS NULL和IS NOT NULL相同,只是输入表达式必须是布尔类型的。
  
7.3 数学函数和运算符
     PostgreSQL为许多类型提供了数学运算符。表 7-2 列出了所有的数学运算符。
  表 7-2. 数学运算符
运算符

描述

例子

结果

  &#43;
  加
  2 &#43; 3
  5
  -
  减
  2 - 3
  -1
  *
  乘
  2 * 3
  6
  /
  除 (两个整数相除的结果如果不是整数,会将结果的小数部分去掉,只保留整数部分)
  (1)4 / 2
  (2)3/2
  (3)2/4
  (1)2
  (2)1
  (3)0
  %
  模除 (求余)
  5 % 4
  1
  ^
  幂(指数运算)
  2.0 ^ 3.0
  8
  |/
  平方根
  |/ 25.0
  5
  ||/
  立方根
  ||/ 27.0
  3
  !
  阶乘
  5 !
  120
  !!
  阶乘 (前缀运算符)
  !! 5
  120
  @
  绝对&#20540;
  @ -5.0
  5
  &
  按位 AND
  91 & 15
  11
  |
  按位OR
  32 | 3
  35
  #
  按位XOR
  17 # 5
  20
  ~
  按位NOT
  ~1
  -2
  <<
  按位左移
  1 << 4
  16
  >>
  按位右移
  8 >> 2
  2
  按位运算运算符只能用于整数类型的数据,而其它的运算符可以用于所有的数&#20540;类型的数据。按位运算的运算符还可以用于位串类型 bit 和 bit varying,如表7-3所示。
  表7-3列出了所有的数学函数。在该表中dp表示double precision,除非特别指明,函数的返回&#20540;的数据类型和它的参数的数据类型相同。表7-4列出了这些数学函数的实例。处理 double precision 数据的函数大多数是在操作系统的C函数库的基础上实现的。
  表7-3. 数学函数
函数

返回&#20540;类型

描述

  abs(x)
  和x类型相同
  绝对&#20540;
  cbrt(dp)
  Dp
  立方根
  ceil(dp 或者 numeric)
  与输入相同
  不小于参数的最小的整数
  ceiling(dp or numeric)
  与输入相同
  不小于参数的最小整数(ceil 的别名)
  degrees(dp)
  dp
  把弧度转为角度
  exp(dp 或 numeric)
  与输入相同
  自然指数
  floor(dp 或 numeric)
  与输入相同
  不大于参数的最大整数
  ln(dp 或 numeric)
  与输入相同
  自然对数
  log(dp 或 numeric)
  与输入相同
  10 为底的对数
  log(b numeric, x numeric)
  numeric
  指定底数的对数
  mod(y, x)
  和参数类型相同
  除法 y/x 的余数(模)
  pi()
  Dp
  &quot;π&quot; 常量
  power(a dp, b dp)
  Dp
  求a的 b 次幂
  power(a numeric, b numeric)
  numeric
  求a的 b 次幂
  radians(dp)
  Dp
  把角度转为弧度
  random()
  Dp
  0.0 到 1.0 之间的随机数&#20540;
  round(dp 或者 numeric)
  与输入相同
  约为最接近参数的整数
  round(v numeric, s int)
  Numeric
  约为最接近参数的有s位小数的数字
  setseed(dp)
  Int
  为以后被调用的 random()函数设置种子
  sign(dp 或者 numeric)
  和输入相同
  参数的符号(-1, 0, &#43;1)
  sqrt(dp 或者 numeric)
  和输入相同
  平方根
  trunc(dp 或者 numeric)
  和输入相同
  去掉参数的小数位
  trunc(v numeric, s int)
  Numeric
  将参数截断为含有 s位小数的数字
  width_bucket(op numeric, b1 numeric, b2 numeric, count in)
  Int
  将b1和b2平分成count个取&#20540;区间,取&#20540;区间的编号从1开始。
  如果b1>b2,则编号为0的取&#20540;区间表示的范围是(b1,正无穷大),编号为count&#43;1的取&#20540;区间表示的范围是(负无穷大,b2)。
  如果b1<b2,则编号为0的取&#20540;区间表示的范围是(负无穷大,b1),编号为count&#43;1的取&#20540;区间表示的范围是(b2,负无穷大)。
  若op落在某个取&#20540;区间内,则返回该取&#20540;区间的编号。
  width_bucket(op dp, b1 dp, b2 dp, count int)
  Int
  函数功能同上
  表7-4. 数学函数实例
例子

结果

  abs(-17.4)
  17.4
  cbrt(27.0)
  3
  ceil(-42.8)
  -42
  ceiling(-95.3)
  -95
  degrees(0.5)
  28.6478897565412
  exp(1.0)
  2.71828182845905
  floor(-42.8)
  -43
  ln(2.0)
  0.693147180559945
  log(100.0)
  2
  log(2.0, 64.0)
  6.0000000000
  mod(9,4)
  1
  pi()
  3.14159265358979
  power(9.0, 3.0)
  729
  power(9.0, 3.0)
  729
  radians(45.0)
  0.785398163397448
  random()
  每次调用的结果是随机的,例如0.453876388259232
  (1)round(42.4)
  (2)round(42.8)
  (1)42
  (2)43
  (1)round(42.4382, 2)
  (2)round(42.4322,2)
  (1)42.44
  (2)42.43
  setseed(0.54823)
  1177314959
  sign(-8.4)
  -1
  sqrt(2.0)
  1.4142135623731
  trunc(42.8)
  42
  (1)trunc(42.4382, 2)
  (2)trunc(42,2)
  (1)42.43
  (2)42.00
  (1)width_bucket(0.7,1,4,2);
  (2)width_bucket(10,1,4,2);
  (3)width_bucket(10,4,1,2);
  (3)width_bucket(3,4,1,2);
  (1)0
  (2)3
  (3)0
  (4)1
  width_bucket(0.35, 0.024, 10.06, 5)
  1
     表7-5列出了所有的三角函数。所有三角函数的参数类型和返回&#20540;的类型都是double precision。
  表7-5. 三角函数
函数

描述

  acos(x)
  反余弦
  asin(x)
  反正弦
  atan(x)
  反正切
  atan2(x, y)
  正切 y/x 的反函数
  cos(x)
  余弦
  cot(x)
  余切
  sin(x)
  正弦
  tan(x)
  正切
  
7.4 字符串函数和运算符
  本节描述用处检查和处理字符串数&#20540;的函数和运算符。字符串类型包括类型 character、character varying和 text/除非另外说明,所有下面列出的函数都可以处理这些数据类型,在处理character 类型的时候,要注意它的自动空&#26684;填充机制对运算结果的影响。有些函数还可以处理位串类型的数据。表 7-6列出了SQL字符串函数和运算符,表 7-7列出了使用这些运算符的实例。
  表 7-6. SQL字符串函数和运算符
  函数或运算符
返回&#20540;类型

描述

  String || string
  text
  连接两个字符串
  String || non-string   或
  non-string || string
  text
  连接一个字符串和另一个非字符串类型的&#20540;
  bit_length(string)
  int
  字符串包含的二进制位的个数
  char_length(string)或character_length(string)
  int
  字符串包含的字符的个数
  lower(string)
  text
  将字符串转换成小写的&#26684;式
  octet_length(string)
  int
  字符串包含的字节的个数
  overlay(string placing string from int [for int])
  text
  替换字符串中的子串
  position(substring in string)
  int
  查找子串在字符串中出现的位置
  substring(string [from int] [for int])
  text
  从字符串中找出指定的子串。from int表示子串开始的位置,默认从1开始,例如from 2表示子串从string的第二个字符开始。for int表示子串的长度,默认取string从子串开始位置到string的末尾的所有子串,例如for 3表示子串的长度是3。
  substring(string from pattern)
  text
  从字符串中找出匹配POSIX正则表达式的子串,参见第7.7.3节获取模式匹配的详细信息。
  substring(string from pattern forescape)
  text
  从字符串中找出匹配正则表达式的子串,参见第7.7.3节获取模式匹配的详细信息。
  trim([leading | trailing | both] [characters] from string)
  text
  从字符串string的开始、末尾或者开始和末尾删除只包含指定的字符串characters 中的字符的最长的字符串。
  如果没有指定参数characters,则它的&#20540;默认是空&#26684;。
  leading表示只删除字符串头部匹配的子串。
  trailing 表示只删除字符串尾部匹配的子串。
  both表示同时删除字符串头部和尾部匹配的子串。
  upper(string)
  text
  将字符串转换成大写的&#26684;式
  表 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 '%#&quot;o_a#&quot;_' 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. 其它的字符串函数
  
函数

返回&#20540;类型

描述

ascii(string)

int

  参数的第一个字符的ASCII编码。对于UTF8类型的字符串,返回它的第一个字符的UTF-8编码。对于其它的多字节编码类型的字符串,参数的第一个字符必须是ASCII类型的字符。
btrim(string text [, characterstext])

text

  从字符串string的开始和末尾删除只包含指定的字符串characters 中的字符的最长的字符串。如果没有指定参数characters,则它的&#20540;默认是空&#26684;。
chr(int)

text

  返回指定的编码&#20540;对应的字符。参数的&#20540;不能是0。参数必须是合法的ASCII编码&#20540;或UTF8编码&#20540;。
convert(string bytea, src_encoding name, dest_encoding name)

bytea

  将用 src_encoding编码的字符串转换成用dest_encoding编码的字符串。数据库中必须存在src_encoding到dest_encoding的编码转换函数。表7-10列出了数据库中内置的合法的编码转换组合。
  如果数据库中不存在 src_encoding到est_encoding的编码转换函数,可以使用命令 CREATE CONVERSION创建一个。
convert_from(string bytea, src_encoding name)

text

  将用 src_encoding编码的字符串转换成用数据库当前的编码类型编码的字符串。
convert_to(string text, dest_encoding name)

bytea

  将字符串转换成以dest_encoding编码的&#26684;式。
decode(string text, type text)

bytea

  从指定的&#26684;式的字符串中解码出二进制字符串。&#26684;式包括base64、hex和escape,详细信息参考下面的encode函数。
encode(data bytea, type text)

text

  将二进制字符串转换成指定的&#26684;式字符串。一共有三种&#26684;式:base64、hex和escape。关于base64请参考RFC2045,hex是十六进制&#26684;式。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的&#20540;,则fill的&#20540;默认是空&#26684;。填充的字符串放在string的头部。
ltrim(string text [, characterstext])

text

  从字符串string的头部删除只包含指定的字符串characters 中的字符的最长的字符串。
  如果没有指定参数characters,则它的&#20540;默认是空&#26684;。
md5(string)

text

  计算字符串string的MD5哈希&#20540;。结果用十六进制的形式表示。
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必须是一个数&#20540;。
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, pattern text [, flags text ])

text[]

  使用POSIX正则表达式作为分割符来分割字符串。参见第7.7.3节。
regexp_split_to_table(string text, pattern 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, length int [,fill text])

text

  用指定的字符串fill将字符串string填充成长度为 length的字符串。如果string的长度已经超过length,则将string截断成长度为length的字符串。
  如果没有指定fill的&#20540;,则fill的&#20540;默认是空&#26684;。填充的字符串放在string的尾部。
rtrim(string text [, characterstext])

text

  从字符串string的尾部删除只包含指定的字符串characters 中的字符的最长的字符串。
  如果没有指定参characters,则它的&#20540;默认是空&#26684;。
split_part(string text, delimiter text, field int)

text

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

int

  返回substring在string中的位置。
substr(string, from [, count] int)

text

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

text

  将用 ASCII表示的字符串转换成其它编码类型的字符串(只支持LATIN1, LATIN2, LATIN9和WIN1250 )。
to_hex(number int or bigint)

text

  将数字转换成十六进制的表示形式。
translate(string text, from text, to text)

text

  如果字符串string中的某个字符匹配字符串from的某个字符,则string中的这个字符将用字符串to中和from中的匹配字符对应的字符代替。字符串to和from的长度应该相等,如果不相等,参见例子中的处理方式。
  表 7-9. 其它的字符串函数实例
  例子
  结果
  (1)ascii('x')
  (2)ascii('yz')
  (3)ascii('我是')
  (1)120
  (2)121
  (3)25105
  (1)btrim('xyxtrimyyx', 'xy')
  (2)btrim('xgTomxxf','gxf');
  (1)trim
  (2)Tom
  (1)chr(65)
  (2)chr(25105)
  (3)chr(25104)
  (1)A
  (2)我
  (3)成
  convert('text_in_utf8', 'UTF8', 'LATIN1')
  用ISO 8859-1&#26684;式表示的字符串text_in_utf8
  convert_from('text_in_utf8', 'UTF8')
  用数据库当前的编码类型表示的字符串text_in_utf8
  convert_to('some text', 'UTF8')
  用UTF8编码的字符串
  (1)decode(‘MTIzAAE=', 'base64')
  (2)decode('3132330001','hex')
  (1)123/000/001
  (2)123/000/001
  (1)encode(E'123//000//001', 'base64')
  (2)encode(E'123//000//001', 'hex')
  (1)MTIzAAE=
  (2)3132330001
  (1)initcap('hi THOMAS')
  (2)initcap('hh&#43;jj');
  (1)Hi Thomas
  (2)Hh&#43;Jj
  (1)length('jose')
  (2)length('我是谁')
  (1)4
  (2)3
  length('jose', 'UTF8')
  4
  (1)lpad('hi', 5, 'xy')
  (2)lpad('gggggg',4,'h');
  (3)lpad('gg',4,'h');
  (4)lpad('gg',4);
  (1)xyxhi
  (2)gggg
  (3)hhgg
  (4)  gg,注意gg前面是两个空&#26684;。
  ltrim('zzzytrim', 'xyz')
  trim
  md5('abc')
  900150983cd24fb0 d6963f7d28e17f72
  pg_client_encoding()
   GB18030
  (1)quote_ident('Foo bar')
  (2)quote_ident('abc')
  (3)quote_ident('abc''');
  (1)&quot;Foo bar&quot;
  (2)abc
  (3) &quot;abc'&quot;
  (1)quote_literal('O/'Reilly')
  (2)quote_literal('abc//');
  (1)'O''Reilly'
  (2) E'abc//'
  quote_literal(42.5)
  '42.5'
  regexp_matches('foobarbequebaz', '(bar)(beque)')
  {bar,beque}
  regexp_replace('Thomas', '.[mN]a.', 'M')
  ThM
  regexp_split_to_array('hello world', E'//s&#43;')
  {hello,world}
  regexp_split_to_table('hello world', E'//s&#43;')
  hello
  world
  (2 rows)
  repeat('Pg', 4)
  PgPgPgPg
  replace('abcdefabcdef', 'cd', 'XX')
  abXXefabXXef
  rpad('hi', 5, 'xy')
  hixyx
  rtrim('trimxxxx', 'x')
  trim
  (1)split_part('abc~@~def~@~ghi', '~@~', 2)
  (2)split_part('abc$de$f','$',3);
  (1)def
  (2)f
  (1)strpos('high', 'ig')
  (2)strpos('我是','是')
  (1)2
  (2)2
  substr('alphabet', 3, 2)
  ph
  to_ascii('Karel')
  Karel
  to_hex(2147483647)
  7fffffff
  (1)translate('12345', '14', 'ax')
  (2)translate('abcdef','abc','f')
  (3)translate('abcdef','abc','fg')
  (1)a23x5
  (2)fdef
  (3)fgdef
   表 7-10. 系统内置的编码类型转换
编码类型转换名称

源编码类型

  目标编码类型
  ascii_to_mic
  SQL_ASCII
  MULE_INTERNAL
  ascii_to_utf8
  SQL_ASCII
  UTF8
  big5_to_euc_tw
  BIG5
  EUC_TW
  big5_to_mic
  BIG5
  MULE_INTERNAL
  big5_to_utf8
  BIG5
  UTF8
  euc_cn_to_mic
  EUC_CN
  MULE_INTERNAL
  euc_cn_to_utf8
  EUC_CN
  UTF8
  euc_jp_to_mic
  EUC_JP
  MULE_INTERNAL
  euc_jp_to_sjis
  EUC_JP
  SJIS
  euc_jp_to_utf8
  EUC_JP
  UTF8
  euc_kr_to_mic
  EUC_KR
  MULE_INTERNAL
  euc_kr_to_utf8
  EUC_KR
  UTF8
  euc_tw_to_big5
  EUC_TW
  BIG5
  euc_tw_to_mic
  EUC_TW
  MULE_INTERNAL
  euc_tw_to_utf8
  EUC_TW
  UTF8
  gb18030_to_utf8
  GB18030
  UTF8
  gbk_to_utf8
  GBK
  UTF8
  iso_8859_10_to_utf8
  LATIN6
  UTF8
  iso_8859_13_to_utf8
  LATIN7
  UTF8
  iso_8859_14_to_utf8
  LATIN8
  UTF8
  iso_8859_15_to_utf8
  LATIN9
  UTF8
  iso_8859_16_to_utf8
  LATIN10
  UTF8
  iso_8859_1_to_mic
  LATIN1
  MULE_INTERNAL
  iso_8859_1_to_utf8
  LATIN1
  UTF8
  iso_8859_2_to_mic
  LATIN2
  MULE_INTERNAL
  iso_8859_2_to_utf8
  LATIN2
  UTF8
  iso_8859_2_to_windows_1250
  LATIN2
  WIN1250
  iso_8859_3_to_mic
  LATIN3
  MULE_INTERNAL
  iso_8859_3_to_utf8
  LATIN3
  UTF8
  iso_8859_4_to_mic
  LATIN4
  MULE_INTERNAL
  iso_8859_4_to_utf8
  LATIN4
  UTF8
  iso_8859_5_to_koi8_r
  ISO_8859_5
  KOI8
  iso_8859_5_to_mic
  ISO_8859_5
  MULE_INTERNAL
  iso_8859_5_to_utf8
  ISO_8859_5
  UTF8
  iso_8859_5_to_windows_1251
  ISO_8859_5
  WIN1251
  iso_8859_5_to_windows_866
  ISO_8859_5
  WIN866
  iso_8859_6_to_utf8
  ISO_8859_6
  UTF8
  iso_8859_7_to_utf8
  ISO_8859_7
  UTF8
  iso_8859_8_to_utf8
  ISO_8859_8
  UTF8
  iso_8859_9_to_utf8
  LATIN5
  UTF8
  johab_to_utf8
  JOHAB
  UTF8
  koi8_r_to_iso_8859_5
  KOI8
  ISO_8859_5
  koi8_r_to_mic
  KOI8
  MULE_INTERNAL
  koi8_r_to_utf8
  KOI8
  UTF8
  koi8_r_to_windows_1251
  KOI8
  WIN1251
  koi8_r_to_windows_866
  KOI8
  WIN866
  mic_to_ascii
  MULE_INTERNAL
  SQL_ASCII
  mic_to_big5
  MULE_INTERNAL
  BIG5
  mic_to_euc_cn
  MULE_INTERNAL
  EUC_CN
  mic_to_euc_jp
  MULE_INTERNAL
  EUC_JP
  mic_to_euc_kr
  MULE_INTERNAL
  EUC_KR
  mic_to_euc_tw
  MULE_INTERNAL
  EUC_TW
  mic_to_iso_8859_1
  MULE_INTERNAL
  LATIN1
  mic_to_iso_8859_2
  MULE_INTERNAL
  LATIN2
  mic_to_iso_8859_3
  MULE_INTERNAL
  LATIN3
  mic_to_iso_8859_4
  MULE_INTERNAL
  LATIN4
  mic_to_iso_8859_5
  MULE_INTERNAL
  ISO_8859_5
  mic_to_koi8_r
  MULE_INTERNAL
  KOI8
  mic_to_sjis
  MULE_INTERNAL
  SJIS
  mic_to_windows_1250
  MULE_INTERNAL
  WIN1250
  mic_to_windows_1251
  MULE_INTERNAL
  WIN1251
  mic_to_windows_866
  MULE_INTERNAL
  WIN866
  sjis_to_euc_jp
  SJIS
  EUC_JP
  sjis_to_mic
  SJIS
  MULE_INTERNAL
  sjis_to_utf8
  SJIS
  UTF8
  tcvn_to_utf8
  WIN1258
  UTF8
  uhc_to_utf8
  UHC
  UTF8
  utf8_to_ascii
  UTF8
  SQL_ASCII
  utf8_to_big5
  UTF8
  BIG5
  utf8_to_euc_cn
  UTF8
  EUC_CN
  utf8_to_euc_jp
  UTF8
  EUC_JP
  utf8_to_euc_kr
  UTF8
  EUC_KR
  utf8_to_euc_tw
  UTF8
  EUC_TW
  utf8_to_gb18030
  UTF8
  GB18030
  utf8_to_gbk
  UTF8
  GBK
  utf8_to_iso_8859_1
  UTF8
  LATIN1
  utf8_to_iso_8859_10
  UTF8
  LATIN6
  utf8_to_iso_8859_13
  UTF8
  LATIN7
  utf8_to_iso_8859_14
  UTF8
  LATIN8
  utf8_to_iso_8859_15
  UTF8
  LATIN9
  utf8_to_iso_8859_16
  UTF8
  LATIN10
  utf8_to_iso_8859_2
  UTF8
  LATIN2
  utf8_to_iso_8859_3
  UTF8
  LATIN3
  utf8_to_iso_8859_4
  UTF8
  LATIN4
  utf8_to_iso_8859_5
  UTF8
  ISO_8859_5
  utf8_to_iso_8859_6
  UTF8
  ISO_8859_6
  utf8_to_iso_8859_7
  UTF8
  ISO_8859_7
  utf8_to_iso_8859_8
  UTF8
  ISO_8859_8
  utf8_to_iso_8859_9
  UTF8
  LATIN5
  utf8_to_johab
  UTF8
  JOHAB
  utf8_to_koi8_r
  UTF8
  KOI8
  utf8_to_sjis
  UTF8
  SJIS
  utf8_to_tcvn
  UTF8
  WIN1258
  utf8_to_uhc
  UTF8
  UHC
  utf8_to_windows_1250
  UTF8
  WIN1250
  utf8_to_windows_1251
  UTF8
  WIN1251
  utf8_to_windows_1252
  UTF8
  WIN1252
  utf8_to_windows_1253
  UTF8
  WIN1253
  utf8_to_windows_1254
  UTF8
  WIN1254
  utf8_to_windows_1255
  UTF8
  WIN1255
  utf8_to_windows_1256
  UTF8
  WIN1256
  utf8_to_windows_1257
  UTF8
  WIN1257
  utf8_to_windows_866
  UTF8
  WIN866
  utf8_to_windows_874
  UTF8
  WIN874
  windows_1250_to_iso_8859_2
  WIN1250
  LATIN2
  windows_1250_to_mic
  WIN1250
  MULE_INTERNAL
  windows_1250_to_utf8
  WIN1250
  UTF8
  windows_1251_to_iso_8859_5
  WIN1251
  ISO_8859_5
  windows_1251_to_koi8_r
  WIN1251
  KOI8
  windows_1251_to_mic
  WIN1251
  MULE_INTERNAL
  windows_1251_to_utf8
  WIN1251
  UTF8
  windows_1251_to_windows_866
  WIN1251
  WIN866
  windows_1252_to_utf8
  WIN1252
  UTF8
  windows_1256_to_utf8
  WIN1256
  UTF8
  windows_866_to_iso_8859_5
  WIN866
  ISO_8859_5
  windows_866_to_koi8_r
  WIN866
  KOI8
  windows_866_to_mic
  WIN866
  MULE_INTERNAL
  windows_866_to_utf8
  WIN866
  UTF8
  windows_866_to_windows_1251
  WIN866
  WIN
  windows_874_to_utf8
  WIN874
  UTF8
  euc_jis_2004_to_utf8
  EUC_JIS_2004
  UTF8
  ut8_to_euc_jis_2004
  UTF8
  EUC_JIS_2004
  shift_jis_2004_to_utf8
  SHIFT_JIS_2004
  UTF8
  ut8_to_shift_jis_2004
  UTF8
  SHIFT_JIS_2004
  euc_jis_2004_to_shift_jis_2004
  EUC_JIS_2004
  SHIFT_JIS_2004
  shift_jis_2004_to_euc_jis_2004
  SHIFT_JIS_2004
  EUC_JIS_2004
7.5 二进制字符串函数和运算符
  本节描述处理bytea类型的数&#20540;的函数和运算符。表7-11列出了这些函数和运算符,表7-12列出了这些函数和运算符的实例。表7-13中列出了其它的二进制字符串处理函数,这些函数有一些在内部使用,用来实现表7-11中列出的SQL标准的二进制字符串函数的,表7-14列出了表7-13中函数的实例。
  表7-11. 二进制字符串函数和运算符
函数

返回&#20540;类型

描述

  string || string
  bytea
  连接两个二进制字符串
  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
  将二进制字符串中的某个二进制位设为指定的&#20540;
  set_byte(string, offset,newvalue)
  bytea
  将二进制字符串中的某个字节设为指定的&#20540;
  substring(string [from int] [for int])
  bytea
  从二进制字符串中中找出指定的子串。from int表示子串开始的位置,默认从1开始,例如from 2表示子串从string的第二个字符开始。for int表示子串的长度,默认取string从子串开始位置到string的末尾的所有子串,例如for 3表示子串的长度是3。
  trim([both] bytes from string)
  bytea
  从二进制字符串string的开始和末尾删除只包含指定的二进制字符串bytes中的字符的最长的二进制字符串。
  表7-12. 二进制字符串函数和运算符实例
例子

结果

  E'////Post'::bytea || E'//047gres//000'::bytea
  //Post'gres/000
  get_bit(E'Th//000omas'::bytea, 45)
  1
  get_byte(E'Th//000omas'::bytea, 4)
  109
  octet_length(E'jo//000se'::bytea)
  5
  position(E'//000om'::bytea in E'Th//000omas'::bytea)
  3
  set_bit(E'Th//000omas'::bytea, 45, 0)
  Th/000omAs
  set_byte(E'Th//000omas'::bytea, 4, 64)
  Th/000o@as
  substring(E'Th//000omas'::bytea from 2 for 3)
  h/000o
  trim(E'//000'::bytea from E'//000Tom//000'::bytea)
  Tom
  表7-13. 其它二进制字符串函数
函数

返回&#20540;类型

描述

  btrim(string bytea, bytes bytea)
  bytea
  从二进制字符串string的开始和末尾删除只包含指定的二进制字符串bytes中的字符的最长的二进制字符串。
  decode(string text, type text)
  bytea
  从指定的&#26684;式的字符串中解码出二进制字符串。&#26684;式包括base64、hex和escape,详细信息参考下面的encode函数。
  encode(string bytea, type text)
  text
  将二进制字符串转换成指定的&#26684;式字符串。一共有三种&#26684;式:base64、hex和escape。关于base64请参考RFC2045,hex是十六进制&#26684;式。escape只是用/000来表示字节0,用两个反斜杠来表示一个反斜杠。
  length(string)
  int
  返回二进制字符串的长度。
  md5(string)
  text
  计算二进制字符串的MD5哈希&#20540;, 结果用十六进制数表示 。
  表7-14. 其它二进制字符串函数实例
例子

结果

  btrim(E'//000trim//000'::bytea, E'//000'::bytea)
  trim
  decode(E'123//000456', 'escape')
  123/000456
  encode(E'123//000456'::bytea, 'escape')
  123/000456
  length(E'jo//000se'::bytea)
  5
  md5(E'Th//000omas'::bytea)
  8ab2d3c9689aaf18 b4958c334c82d8b1
  
7.6 位串函数和运算符
      本节描述用于处理位串类型数据的函数和运算符。位串类型包括bit 和bitvarying。对于位串类型的数据可以使用常用的比较运算符,表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
      函数length、bit_length、octet_length、position和substring除了用于字符串之外,也可以用于位串。
      此外,可以在整数和位串类型之间进行转换。例如:
  44::bit(10)                    0000101100
  44::bit(3)                     100
  cast(-44 as bit(12))           111111010100
  '1110'::bit(4)::integer        14
  
      将整数转换成bit(n)类型时,只会取整数的最右边的n个二进制位。注意,如果只是转换为 &quot;bit&quot;,意思就是转换成 bit(1),结果只会取整数的最右边的那个二进制位。
  转载地址:
  http://blog.csdn.net/neo_liu0000/article/details/6255303

运维网声明 1、欢迎大家加入本站运维交流群:群②:261659950 群⑤:202807635 群⑦870801961 群⑧679858003
2、本站所有主题由该帖子作者发表,该帖子作者与运维网享有帖子相关版权
3、所有作品的著作权均归原作者享有,请您和我们一样尊重他人的著作权等合法权益。如果您对作品感到满意,请购买正版
4、禁止制作、复制、发布和传播具有反动、淫秽、色情、暴力、凶杀等内容的信息,一经发现立即删除。若您因此触犯法律,一切后果自负,我们对此不承担任何责任
5、所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其内容的准确性、可靠性、正当性、安全性、合法性等负责,亦不承担任何法律责任
6、所有作品仅供您个人学习、研究或欣赏,不得用于商业或者其他用途,否则,一切后果均由您自己承担,我们对此不承担任何法律责任
7、如涉及侵犯版权等问题,请您及时通知我们,我们将立即采取措施予以解决
8、联系人Email:admin@iyunv.com 网址:www.yunweiku.com

所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其承担任何法律责任,如涉及侵犯版权等问题,请您及时通知我们,我们将立即处理,联系人Email:kefu@iyunv.com,QQ:1061981298 本贴地址:https://www.yunweiku.com/thread-303244-1-1.html 上篇帖子: PostgreSQL+PostGIS 的使用 下篇帖子: PostgreSQL 9.3发布
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

扫码加入运维网微信交流群X

扫码加入运维网微信交流群

扫描二维码加入运维网微信交流群,最新一手资源尽在官方微信交流群!快快加入我们吧...

扫描微信二维码查看详情

客服E-mail:kefu@iyunv.com 客服QQ:1061981298


QQ群⑦:运维网交流群⑦ QQ群⑧:运维网交流群⑧ k8s群:运维网kubernetes交流群


提醒:禁止发布任何违反国家法律、法规的言论与图片等内容;本站内容均来自个人观点与网络等信息,非本站认同之观点.


本站大部分资源是网友从网上搜集分享而来,其版权均归原作者及其网站所有,我们尊重他人的合法权益,如有内容侵犯您的合法权益,请及时与我们联系进行核实删除!



合作伙伴: 青云cloud

快速回复 返回顶部 返回列表