zoukankan      html  css  js  c++  java
  • PostgreSQL函数和运算符(一)

     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类型的结果,类似“1 < 2 < 3” 这样的表达式是非法的。

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

    a >= x AND a <= y类似地,a NOT BETWEEN x AND 等价于 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 SYMMETRICBETWEEN的功能类似,但是在使用BETWEEN SYMMETRIC时,AND运算符左边的操作数不一定要小于或者等于它右边的操作数。例如:

    (1)select 3 between symmetric 2 and 4;

     ?column?

    ----------

     t                --结果为真

    (1 row)

    (2)select 3 between symmetric 4 and 2;

     ?column?

    ----------

     t               --结果为真

    (1 row)

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

    expression IS NULL

    expression IS NOT NULL

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

    expression ISNULL

    expression NOTNULL

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

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

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

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

    expression IS DISTINCT FROM expression

    expression IS NOT DISTINCT FROM expression

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

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

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

    expression IS TRUE

    expression IS NOT TRUE

    expression IS FALSE

    expression IS NOT FALSE

    expression IS UNKNOWN

    expression IS NOT UNKNOWN

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

     

    7.3 数学函数和运算符

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

    表 7-2. 数学运算符

    运算符

    描述

    例子

    结果

    +

    2 + 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

    @

    绝对值

    @ -5.0

    5

    &

    按位 AND

    91 & 15

    11

    |

    按位OR

    32 | 3

    35

    #

    按位XOR

    17 # 5

    20

    ~

    按位NOT

    ~1

    -2

    <<

    按位左移

    1 << 4

    16

    >>

    按位右移

    8 >> 2

    2

          

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

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

    表7-3. 数学函数

    函数

    返回值类型

    描述

    abs(x)

    x类型相同

    绝对值

    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

    "π" 常量

    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 之间的随机数值

    round(dp 或者 numeric)

    与输入相同

    约为最接近参数的整数

    round(v numeric, s int)

    Numeric

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

    setseed(dp)

    Int

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

    sign(dp 或者 numeric)

    和输入相同

    参数的符号(-1, 0, +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个取值区间,取值区间的编号从1开始。

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

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

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

    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列出了所有的三角函数。所有三角函数的参数类型和返回值的类型都是double precision。

    表7-5. 三角函数

    函数

    描述

    acos(x)

    反余弦

    asin(x)

    反正弦

    atan(x)

    反正切

    atan2(xy)

    正切 y/x 的反函数

    cos(x)

    余弦

    cot(x)

    余切

    sin(x)

    正弦

    tan(x)

    正切

    7.4 字符串函数和运算符

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

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

         函数或运算符

    返回值类型

    描述

    String || string

    text

    连接两个字符串

    String || non-string   或

     non-string || string

    text

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

    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 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 frompattern)

    text

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

    substring(string from patternfor escape)

    text

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

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

    text

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

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

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

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

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

    upper(string)

    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. 其它的字符串函数

     

    函数

    返回值类型

    描述

    ascii(string)

    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_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编码的格式。

    decode(string text, type text)

    bytea

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

    encode(data bytea, type text)

    text

    将二进制字符串转换成指定的格式字符串。一共有三种格式:base64hexescape。关于base64请参考RFC2045,hex是十六进制格式。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

    计算字符串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, 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的值,则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

    返回substring在string中的位置。

    substr(string, from [,count] int)

    text

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

    to_ascii(string text [,encoding text])

    text

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

    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格式表示的字符串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+jj');

    (1)Hi Thomas

    (2)Hh+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前面是两个空格。

    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)"Foo bar"

    (2)abc

    (3) "abc'"

    (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+')

    {hello,world}

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

    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类型的数值的函数和运算符。表7-11列出了这些函数和运算符,表7-12列出了这些函数和运算符的实例。表7-13中列出了其它的二进制字符串处理函数,这些函数有一些在内部使用,用来实现表7-11中列出的SQL标准的二进制字符串函数的,表7-14列出了表7-13中函数的实例。

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

    函数

    返回值类型

    描述

    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

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

    set_byte(string, offset,newvalue)

    bytea

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

    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. 其它二进制字符串函数

    函数

    返回值类型

    描述

    btrim(string bytea, bytes bytea)

    bytea

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

    decode(string text, type text)

    bytea

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

    encode(string bytea, type text)

    text

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

    length(string)

    int

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

    md5(string)

    text

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

    表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 和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

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

  • 相关阅读:
    redhat 关机注销命令详解
    CentOS网络配置详解
    Red Hat 6网络配置笔记
    H3C三层交换机S5500初始配置+网络访问策略
    python 发邮件 ,转载:https://mp.weixin.qq.com/s/kmNZ04MlDve4AmCCOoT2HA
    解决不能右键查看元素的问题, 转载:https://mp.weixin.qq.com/s/V_fpPN62Kdf0bz6zgFpVCg
    这几点鲜有人知的爬虫技巧,让你爽歪歪 转载:https://mp.weixin.qq.com/s/52luElhn4nRBZCdQMGEhnw
    一个反爬 JS 逆向分析的例子 转载:https://mp.weixin.qq.com/s/2luhB-AhMIzxVh6rPERzCA
    ssh 端口转发 转载:https://mp.weixin.qq.com/s/uesOCt9gmdST-HpwYTKsIw
    爬虫视频
  • 原文地址:https://www.cnblogs.com/neights/p/3093137.html
Copyright © 2011-2022 走看看