字符处理函数和操作符(上)

105 阅读32分钟

字符处理函数和操作符

GaussDB提供的字符处理函数和操作符主要用于字符串与字符串、字符串与非字符串之间的连接,以及字符串的模式匹配操作。注意:字符串处理函数除了length相关函数,其他函数和操作符不支持大于1GBclob作为参数。

  • bin(number)

    描述:返回给定数字的二进制值表示的字符串。

    参数说明类型描述
    number- 整数类型:tinyint、smallint、mediumint、int、bigint。
    • 无符号整数类型:tinyint unsigned、smallint unsigned、int unsigned、bigint unsigned
    • 字符和文本类型:char,varchar、tinytext,text,mediumtext,longtext,仅支持纯数字整数字符串,且整数范围在bigint范围内。
    • 浮点类型:float、real、double。
    • 定点类型:numeric、decimal、dec。
    • 布尔类型:bool。 | 表示给定数字。 |

    返回值类型:text。

    示例:

    | ``` gaussdb=# SELECT bin(5); bin -------- 101 (1 row)

    | ---------------------------------------------------------------- |
    
    ![](https://p6-xtjj-sign.byteimg.com/tos-cn-i-73owjymdk6/a88ba15d065544f19c717579cbd72936~tplv-73owjymdk6-jj-mark-v1:0:0:0:0:5o6Y6YeR5oqA5pyv56S-5Yy6IEAgamVycnl3YW5nMTk4Mw==:q75.awebp?rk3s=f64ab15b&x-expires=1770797316&x-signature=2vAp0oTlRjYLAS9a4mE%2ByY%2BKdTg%3D)
    
    -   bin函数仅在参数sql_compatibility='MYSQL'时生效。
    -   如果入参number是小数,将其向下取整。
    -   如果入参number的绝对值超过bigint unsigned最大值,将入参number转换为bigint unsigned最大值。
    
  • bit_length(string)

    描述:字符串的位数。

    返回值类型:int。

    示例:

    | ``` gaussdb=# SELECT bit_length('world'); bit_length ------------ 40 (1 row)

    | ------------------------------------------------------------------------------------------- |
    
    
  • btrim(string text [, characters text])

    描述:从string开头和结尾删除只包含characters中字符(缺省是空白)的最长字符串。

    返回值类型:text。

    示例:

    | ``` gaussdb=# SELECT btrim('sring' , 'ing'); btrim ------- sr (1 row)

    | ---------------------------------------------------------------------------- |
    
    
  • char_length(string)或character_length(string)

    描述:字符串中的字符个数。

    返回值类型:int。

    示例:

    | ``` gaussdb=# SELECT char_length('hello'); char_length ------------- 5 (1 row)

    | ----------------------------------------------------------------------------------------------- |
    
    
  • dump(expr[, return_fmt [, start_position [, length ] ] ])

    描述:返回输入表达式的数据类型代码、字节长度和内部表示形式。return_fmt指定内部表现形式的进制,start_position 指定从第几个字节开始,length 表示读取的长度。

    返回值类型:text。

    示例:

    | ``` gaussdb=# SELECT dump('abc测试'); dump ------------------------------------------------- Typ=705 Len=9: 97,98,99,230,181,139,232,175,149 (1 row)

    | ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
    
    ![](https://p6-xtjj-sign.byteimg.com/tos-cn-i-73owjymdk6/fab95a811364474687de97aa5219b451~tplv-73owjymdk6-jj-mark-v1:0:0:0:0:5o6Y6YeR5oqA5pyv56S-5Yy6IEAgamVycnl3YW5nMTk4Mw==:q75.awebp?rk3s=f64ab15b&x-expires=1770797316&x-signature=mu8dopS6dnLCSOPvIyewPvsPoyQ%3D)
    
    此函数在ORA兼容模式数据库中且参数a_format_version值为10c和a_format_dev_version值为s2的情况下有效。
    
    
  • elt(pos,str1,str2,...)

    描述:返回后面字符串的第pos个字符串。

    参数说明类型描述
    pos- 整数类型:tinyint、smallint、mediumint、int、bigint。
    • 无符号整数类型:tinyint unsigned、smallint unsigned、int unsigned。
    • 字符和文本类型:char,varchar、tinytext,text,mediumtext,longtext,仅支持纯数字整数字符串,且整数范围在bigint范围内。
    • 浮点类型:float、real、double。
    • 定点类型:numeric、decimal、dec。
    • 布尔类型:bool。 | 表示指定位置的参数。 | | str1,str2,... | - 整数类型:tinyint、smallint、mediumint、int、bigint。
    • 无符号整数类型:tinyint unsigned、smallint unsigned、int unsigned、bigint unsigned。
    • 字符和文本类型:char,varchar、tinytext,text,mediumtext,longtext。
    • 浮点类型:float、real、double。
    • 定点类型:numeric、decimal、dec。
    • 布尔类型:bool。
    • 大对象类型:tinyblob,blob,mediumblob,longblob。
    • 日期类型:datetime,timestamp,date,time。 | 表示字符串列表。 |

    返回值类型:text。

    示例:

    | ``` gaussdb=# SELECT elt(3, 'a', 'b', 'c'); elt ------- c (1 row)

    | ----------------------------------------------------------------------------- |
    
    ![](https://p6-xtjj-sign.byteimg.com/tos-cn-i-73owjymdk6/248a4475df6345e6820cc8d17ef06762~tplv-73owjymdk6-jj-mark-v1:0:0:0:0:5o6Y6YeR5oqA5pyv56S-5Yy6IEAgamVycnl3YW5nMTk4Mw==:q75.awebp?rk3s=f64ab15b&x-expires=1770797316&x-signature=wnvIJRtDDCqnFRZtIPjTWspVhKI%3D)
    
    -   elt函数仅在参数sql_compatibility='MYSQL'时生效。
    -   如果入参pos小于1或者超过参数的数量,则返回NULL。
    
    
  • field(str,str1,str2,str3,...)

    描述:field函数返回str在{str1,str2,str3,...}列表中的位置,从1开始递增,返回0表示str未找到;str为NULL时,直接返回0;函数入参全部为数字时按照数字进行比较,入参全部为非数字类型时按照字符串进行比较,入参存在数字和非数字混合时按照double类型进行比较。

    参数说明类型描述
    str,str1,str2,str3,...- 整数类型:tinyint、smallint、mediumint、int、bigint、tinyint unsigned、smallint unsigned、int unsigned、bigint unsigned。
    • Bool类型:true、false。
    • 浮点类型:float(p)、float、real、double,float(m, d)、double(m, d)、real(m, d)。
    • 定点类型:numeric、decimal、dec。
    • 文本类型:tinytext、text、mediumtext、longtext。
    • 字符串类型:char、varchar。
    • 大对象类型:tinyblob、blob、mediumblob、longblob。
    • 日期类型:datetime、timestamp、date、time。 | 表示字符串列表。 |

    返回值类型:int。

    实例:

    | ``` gaussdb=# SELECT field( 'abc','1',1,'abc','abcd' ); field ------- 3 (1 row)

    | ------------------------------------------------------------------------------------------ |
    
    ![](https://p6-xtjj-sign.byteimg.com/tos-cn-i-73owjymdk6/2364c9a742d949c2a2bf2464686d7d5b~tplv-73owjymdk6-jj-mark-v1:0:0:0:0:5o6Y6YeR5oqA5pyv56S-5Yy6IEAgamVycnl3YW5nMTk4Mw==:q75.awebp?rk3s=f64ab15b&x-expires=1770797316&x-signature=iwDkHjX5bgke17NZpY%2FCgzmrXY8%3D)
    
    -   field函数仅在参数sql_compatibility='MYSQL'时生效。
    -   b_format_version='5.7'和b_format_dev_version='s1'版本开始,sql_mode参数pad_char_to_full_length控制对char类型尾部填充空格,会影响field的比较结果,具体请参见[表1](https://doc.hcs.huawei.com/db/zh-cn/gaussdbqlh/24.1.30/devg-dist/gaussdb-12-0326.html#ZH-CN_TOPIC_0000001911585141__zh-cn_topic_0000001704458093_zh-cn_topic_0059777889_zh-cn_topic_0058966269_table29186418)。
    -   b_format_version='5.7'和b_format_dev_version='s1'版本开始,字符类型、二进制类型、数值类型、日期时间类型行为兼容M,会影响field的比较结果,具体请参见[数据类型](https://doc.hcs.huawei.com/db/zh-cn/gaussdbqlh/24.1.30/devg-dist/gaussdb-12-0322.html#ZH-CN_TOPIC_0000001911585145)。对于数值类型中的浮点类型,由于连接参数设置不同,精度可能与M有差异,不建议使用该场景,或使用numeric类型代替,具体请参见[连接参数](https://doc.hcs.huawei.com/db/zh-cn/gaussdbqlh/24.1.30/devg-dist/gaussdb-12-0050.html#ZH-CN_TOPIC_0000001865747044__zh-cn_topic_0000001704458029_section51233666102514)。
    -   b_format_version='5.7'和b_format_dev_version='s2'版本开始,支持字符转义和常量字符串获取字符序,字符序会影响field的比较结果,具体请参见[SET](https://doc.hcs.huawei.com/db/zh-cn/gaussdbqlh/24.1.30/devg-dist/gaussdb-12-0686.html#ZH-CN_TOPIC_0000001865586052)章节SET NAMES语法,字符类型不同字符序间的合并规则请参见[字符集和字符序合并规则](https://doc.hcs.huawei.com/db/zh-cn/gaussdbqlh/24.1.30/devg-dist/gaussdb-12-0352.html#ZH-CN_TOPIC_0000001911666561)。
    
    
  • insert(str1, pos, len, str2)

    描述:返回字符串str1的处理结果,子字符串起始于pos位置,将len个字符长的字符串代替为str2。任意传参为NULL,则返回值为NULL。

    参数说明类型描述
    pos、len- 整数类型:tinyint、smallint、mediumint、int、bigint。
    • 无符号整数类型:tinyint unsigned、smallint unsigned、int unsigned、bigint unsigned。
    • 字符和文本类型:char,varchar、tinytext,text,mediumtext,longtext,仅支持纯数字整数字符串。
    • 浮点类型:float、real、double。
    • 定点类型:numeric、decimal、dec。 | pos表示指定位置的参数;len表示替换的长度。 | | str1、str2 | - NULL。
    • 整型:tinyint、smallint、mediumint、int、bigint; tinyint unsigned、smallint unsigned、int unsigned、bigint unsigned;但整型数值超过正负81个9,返回值与MYSQL有差异。此差异为GaussDB与MYSQL固有差异,非本函数导致。
    • 浮点型、定点型:float、real、double;numeric、decimal、dec;但当以科学计数法表示时,GaussDB末尾0值会显示,M*不显示,以科学计数法打印,此为固有显示差异。非本函数所致。
    • 字符串类型:char、varchar。
    • 文本类型:tinytext、text,mediumtext、longtext。
    • 大对象类型:tinyblob、blob、mediumblob、longblob。
    • 日期类型:datetime、timestamp、date、time。 | 字符串。 |

    返回值类型:函数返回值是text类型(s1和s2都是text类型)或bytea类型(s1或s2任意参数为bytea类型)。

    示例:

    | ``` gaussdb=# SELECT INSERT('abcdef',2,3,'gg'); insert -------- aggef (1 row)

    | ------------------------------------------------------------------------------------- |
    
    ![](https://p6-xtjj-sign.byteimg.com/tos-cn-i-73owjymdk6/defab4c2f26949d5a2cd6d47a9dc9b2c~tplv-73owjymdk6-jj-mark-v1:0:0:0:0:5o6Y6YeR5oqA5pyv56S-5Yy6IEAgamVycnl3YW5nMTk4Mw==:q75.awebp?rk3s=f64ab15b&x-expires=1770797316&x-signature=4m3idvTA4E7WPbRgTota6SnZ2eU%3D)
    
    -   insert函数仅在参数sql_compatibility='MYSQL'时生效;
    -   Int64类型传参有范围限制,当超出-9223372036854775808~9223372036854775807范围会直接报错。MYSQL对数值类型传参范围无限制,异常会告警,按照上限或下限数值处理;字符串传参有限制,入参text类型字符串长度最大为2^30-5字节,入参bytea类型字符串长度最大为2^30-512字节。
    
    
  • instr(text,text,int,int)

    描述:instr(string1,string2,int1,int2)返回在string1中从int1位置开始匹配到第int2次string2的位置,第一个int表示开始匹配起始位置,第二个int表示匹配的次数。

    返回值类型:int。

    示例:

    | ``` gaussdb=# SELECT instr( 'abcdabcdabcd', 'bcd', 2, 2 ); instr ------- 6 (1 row)

    | --------------------------------------------------------------------------------------------- |
    
    
  • instrb(text,text,int,int)

    描述:instrb(string1,string2,int1,int2)返回在string1中从int1位置开始匹配到第int2次string2的位置,第一个int表示开始匹配起始位置,第二个int表示匹配的次数。与instr函数不同的是,instrb固定以字节为单位,不受所使用的字符集影响。

    返回值类型:int。

    示例:

    | ``` gaussdb=# SELECT instrb( 'abcdabcdabcd', 'bcd', 2, 2 ); instrb ------- 6 (1 row)

    | ----------------------------------------------------------------------------------------------- |
    
    ![](https://p6-xtjj-sign.byteimg.com/tos-cn-i-73owjymdk6/92008ab84056440d83a0baa5b86f2f14~tplv-73owjymdk6-jj-mark-v1:0:0:0:0:5o6Y6YeR5oqA5pyv56S-5Yy6IEAgamVycnl3YW5nMTk4Mw==:q75.awebp?rk3s=f64ab15b&x-expires=1770797316&x-signature=QsI4gLUPbpWqQ5j4lL%2FIT3WzrR8%3D)
    
    -   此函数在ORA兼容模式数据库中且参数a_format_version值为10c和a_format_dev_version值为s1的情况下有效。
    -   参数int1、int2入参若为小数则不会被四舍五入,而是被截断。
    
    
  • lengthb(text/bpchar)

    描述:获取指定字符串的字节数。

    返回值类型:int。

    示例:

    | ``` gaussdb=# SELECT lengthb('hello'); lengthb --------- 5 (1 row)

    | ------------------------------------------------------------------------------- |
    
    
  • left(str text, n int)

    描述:返回字符串的前n个字符。当n是负数时,返回除最后|n|个字符以外的所有字符。

    返回值类型:text。

    示例:

    | ``` gaussdb=# SELECT left('abcde', 2); left ------ ab (1 row)

    | -------------------------------------------------------------------- |
    
    
  • length(string bytea, encoding name )

    描述:指定encoding编码格式的string的字符数。在这个编码格式中,string必须是有效的。

    返回值类型:int。

    示例:

    | ``` gaussdb=# SELECT length('jose', 'UTF8'); length -------- 4 (1 row)

    | ---------------------------------------------------------------------------------- |
    
    ![](https://p6-xtjj-sign.byteimg.com/tos-cn-i-73owjymdk6/9bb3e219d4c34387910a98aa54f3c165~tplv-73owjymdk6-jj-mark-v1:0:0:0:0:5o6Y6YeR5oqA5pyv56S-5Yy6IEAgamVycnl3YW5nMTk4Mw==:q75.awebp?rk3s=f64ab15b&x-expires=1770797316&x-signature=onmJO9Gr2BZq2K4MQZed1FHoTt4%3D)
    
    如果是查询bytea类型的长度,指定utf8编码时,最大长度只能为536870888。
    
    
  • locate(substr, str[, pos])

    描述:返回字符串substr在字符串str中第一次出现的位置,从位置pos(默认为1)开始算起。如果在str中找不到substr,则此函数返回0。

    参数说明类型描述
    substr、str- 整型:tinyint、smallint、mediumint、int、bigint、tinyint unsigned、smallint unsigned、int unsigned、bigint unsigned。
    • 浮点型:float、double。

    • 任意精度类型:numeric。

    • 字符类型:char、varchar、text。

    • 二进制类型:bytea、blob。

    • 日期/时间类型:date、time、datetime、timestamp。 | 1. substr必需,表示要搜索的子字符串。

    1. str必需,表示将被搜索的字符串。 | | pos | - 整型:tinyint、smallint、mediumint、int、tinyint unsigned、smallint unsigned、int unsigned、bigint unsigned。

    • 浮点型:float、double。
    • 任意精度类型:numeric。
    • 字符类型:char、varchar、text。
    • 布尔类型:true、false。 | 可选,表示搜索的起始位置。 |

    返回值类型:int。

    示例:

    | ``` gaussdb=# SELECT locate( 'b','abcabc'); locate ------- 2 (1 row) gaussdb=# SELECT locate( 'b','abcabc',3); locate ------- 5 (1 row)

    | --------------------------------------------------------------------------------------------------------------------------------------------------------- |
    
    ![](https://p6-xtjj-sign.byteimg.com/tos-cn-i-73owjymdk6/2ceeb529aa3b44c386d335e3ec7cadd9~tplv-73owjymdk6-jj-mark-v1:0:0:0:0:5o6Y6YeR5oqA5pyv56S-5Yy6IEAgamVycnl3YW5nMTk4Mw==:q75.awebp?rk3s=f64ab15b&x-expires=1770797316&x-signature=QwGZd12HGe749h8XvIYyyBv4RGg%3D)
    
    locate函数仅在参数sql_compatibility='MYSQL'时生效。
    
    
  • lpad_s(string text, length int [, fill text])

    描述:通过填充字符fill(缺省时为空白),把string填充为length长度。如果string已经比length长则报错。

    返回值类型:text。

    此函数在ORA兼容模式数据库中且参数a_format_version值为10c和a_format_dev_version值为s1的情况下:

    • 参数length表示字符串显示长度,单个字符的显示长度按照ORA兼容处理。
    • 函数执行过程中出现length剩余长度为1且下一个字符显示长度为2,在字符串左侧添加一个空格字符。
    • 参数length入参若为小数则不会被四舍五入,而是会向下取整。
    • 参数string与fill不支持不符合编码规范的输入。

    在其他情况下:

    • 参数length表示字符串中字符总长度,单个字符的长度固定为1。
    • 参数length入参若为小数则被四舍五入。
    • 参数string与fill不支持不符合编码规范的输入。

    示例:

    | ``` gaussdb=# SELECT lpad_s('hi', 5, 'xyza'); lpad_s ------- xyzhi (1 row) --ORA兼容模式。 gaussdb=# CREATE DATABASE gaussdb_o WITH DBCOMPATIBILITY 'ORA'; gaussdb=# \c gaussdb_o --设置参数。 gaussdb_o=# SET a_format_version='10c'; gaussdb_o=# SET a_format_dev_version='s1'; --执行查询。 gaussdb_o=# SELECT LPAD_S('expr1',7,'中国'); lpad_s --------- 中expr1 (1 row) gaussdb_o=# SELECT LPAD_S('expr1',8,'中国'); lpad_s ---------- 中expr1 (1 row) --删除数据库和重置参数。 gaussdb_o=# \c postgres; gaussdb=# DROP DATABASE gaussdb_o; gaussdb=# RESET ALL;

    | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
    
    
  • lpad(string text, length int [, fill text])

    描述:通过填充字符fill(缺省时为空白),把string填充为length长度。如果string已经比length长则将其尾部截断。

    返回值类型:text。

    此函数在ORA兼容模式数据库中且参数a_format_version值为10c和a_format_dev_version值为s1的情况下:

    • 参数length表示字符串显示长度,单个字符的显示长度按照ORA兼容处理。
    • 函数执行过程中出现length剩余长度为1且下一个字符显示长度为2,在字符串左侧添加一个空格字符。
    • 参数length入参若为小数则不会被四舍五入,而是会向下取整。
    • 参数string与fill不支持不符合编码规范的输入。

    在其他情况下:

    • 参数length表示字符串中字符总长度,单个字符的长度固定为1。
    • 参数length入参若为小数则被四舍五入。
    • 参数string与fill不支持不符合编码规的范输入。

    示例:

    | ``` gaussdb=# SELECT lpad('hi', 5, 'xyza'); lpad ------- xyzhi (1 row) --ORA兼容模式。 gaussdb=# CREATE DATABASE gaussdb_o WITH DBCOMPATIBILITY 'ORA'; gaussdb=# \c gaussdb_o; --设置参数。 gaussdb_o=# SET a_format_version='10c'; gaussdb_o=# SET a_format_dev_version='s1'; --执行查询。 gaussdb_o=# SELECT LPAD('expr1',7,'中国'); lpad --------- 中expr1 (1 row) gaussdb_o=# SELECT LPAD('expr1',8,'中国'); lpad ---------- 中expr1 (1 row) --删除数据库和重置参数。 gaussdb_o=# \c postgres; gaussdb=# DROP DATABASE gaussdb_o; gaussdb=# RESET ALL;

    | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ |
    
    
  • make_set(bits,str1,str2...)

    描述:str1对应bits入参在比特形式下的位0,str2对应位1,以此类推。对应比特形式下位为1,则将对应的str参数追加到结果中,以逗号作为分隔符返回。

    参数说明类型描述
    make_set- bits入参支持:
    -   NULL-   整型:tinyint、smallint、mediumint、intbigint; tinyint unsigned、smallint unsigned、int unsigned、bigint unsigned。
    -   浮点、定点型:floatrealdoublenumericdecimaldec-   比特类型:bit。Gauss未完善支持bit,代码设计中当入参1为十六进制如“x'FFF'”,长度为奇数时,MYSQL会报错,存在差异。
    -   字符串类型:charvarchar;仅支持纯数字整数字符串;带小数字符串由于取整规则与M*存在差异,返回结果存在差异。数字字母拼接字符串不支持。纯数字字符串范围在bigint范围。
    -   文本类型:tinytext,text,mediumtext,longtext;仅支持纯数字整数字符串,且整数范围在bigint范围内,超出范围返回结果与MYSQL存在差异;带小数字符串由于取整规则与MYSQL存在差异,返回结果存在差异。数字字母拼接文本类型不支持。纯数字字符串范围限制在bigint范围。
    -   大对象类型:tinyblob,blob,mediumblob,longblob
    
    • str可变入参支持:

      • NULL。
      • 整型:tinyint、smallint、mediumint、int、bigint; tinyint unsigned、smallint unsigned、int unsigned、bigint unsigned;但整型数值超过正负81个9,返回值与MYSQL有差异。此差异为GaussDB与M*固有差异,非本函数导致。
      • 浮点型、定点型:float、real、double;numeric、decimal、dec;但当以科学计数法表示时,GaussDB末尾0值会显示,MYSQL不显示,以科学计数法打印,此为固有显示差异。非本函数所致。
      • 字符串类型:char,varchar
      • 文本类型:tinytext,text,mediumtext,longtext
      • 大对象类型:tinyblob,blob,mediumblob,longblob
      • 日期类型:datetime, timestamp, date, time | 返回结果由str1,str2…中被选中的某些字符串拼接而成,以逗号作为分隔符。 |

    返回值类型:text。

    示例:

    | ``` gaussdb=# SELECT make_set(7,'a','b','c','d'); make_set ---------- a,b,c (1 row) gaussdb=# SELECT make_set(b'1010101010101101010101010110101010101011010101010101101010101010','1','2','3','4','5','6','7','8','9','10','11','12','13','14','15','16','17','18','19','20','21','22','23','24','25','26','27','28','29','30','31','32','33','34','35','36','37','38','39','40','41','42','43','44','45','46','47','48','49','50','51','52','53','54','55','56','57','58','59','60','61','62','63','64','65','66','67','68','69'); make_set --------------------------------------------------------------------------------------------------- 2,4,6,8,10,12,13,15,17,19,21,23,25,26,28,30,32,34,36,38,39,41,43,45,47,49,51,52,54,56,58,60,62,64 (1 row)

    | --------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
    
    ![](https://p6-xtjj-sign.byteimg.com/tos-cn-i-73owjymdk6/9b35bd0f85eb4b9fa54246e621adb39d~tplv-73owjymdk6-jj-mark-v1:0:0:0:0:5o6Y6YeR5oqA5pyv56S-5Yy6IEAgamVycnl3YW5nMTk4Mw==:q75.awebp?rk3s=f64ab15b&x-expires=1770797316&x-signature=2yrkmrMxMnBhm44m3XI%2BegENwd8%3D)
    
    -   make_set函数仅在参数sql_compatibility='MYSQL'时生效。
    -   bits参数为整型时,最大范围支持到int128,低于MYSQL范围。
    -   bits参数为日期类型datetime、timestamp、date、time,由于时间类型转整型与MYSQL存在差异,非本函数所致,目前均不做支持。
    -   bit类型或bool类型由于此类数据类型GaussDB与MYSQL存在差异,返回结果导致的差异为GaussDB与MYSQL固有差异,非本函数导致。bits入参为bool类型,str入参为bit类型与bool类型均不做支持。
    
    
  • notlike(x bytea name text, y bytea text)

    描述:比较x和y是否不一致。

    返回值类型:Boolean。

    示例:

    | ``` gaussdb=# SELECT notlike(1,2); notlike -------------- t (1 row) gaussdb=# SELECT notlike(1,1); notlike -------------- f (1 row)

    | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------ |
    
    
  • octet_length(string)

    描述:字符串中的字节数。

    返回值类型:int。

    示例:

    | ``` gaussdb=# SELECT octet_length('jose'); octet_length -------------- 4 (1 row)

    | -------------------------------------------------------------------------------------------------- |
    
    
  • overlay(string placing string FROM int [for int])

    描述:替换子字符串。FROM int表示从第一个string的第几个字符开始替换,for int表示替换第一个string的字符数目。

    返回值类型:text。

    示例:

    | ``` gaussdb=# SELECT overlay('hello' placing 'world' from 2 for 3 ); overlay --------- hworldo (1 row)

    | -------------------------------------------------------------------------------------------------------------- |
    
    
  • position(substring in string)

    描述:指定子字符串的位置。字符串区分大小写。

    返回值类型:int,字符串不存在时返回0。

    示例:

    | ``` gaussdb=# SELECT position('ing' in 'string'); position ---------- 4 (1 row)

    | --------------------------------------------------------------------------------------------- |
    
    
  • pg_client_encoding()

    描述:当前客户端编码名称。

    返回值类型:name。

    示例:

    | ``` gaussdb=# SELECT pg_client_encoding(); pg_client_encoding -------------------- UTF8 (1 row)

    | ------------------------------------------------------------------------------------------------------ |
    
    
  • quote(str)

    描述:返回字符串由单引号括起来,并为字符串中\、单引号'、ASCII NUL(\0)和Control+Z(\Z)的实例前面带上反斜线\。如果参数为NULL,则返回值为字符串NULL,而不括起单引号。

    参数说明类型描述
    quote- NULL。
    • 整型:tinyint、smallint、mediumint、int、bigint; tinyint unsigned、smallint unsigned、int unsigned、bigint unsigned;但整型数值超过正负81个9,返回值与M有差异。此差异为Gauss与M固有差异,非本函数导致。
    • 浮点型、定点型:float、real、double;numeric、decimal、dec;但当以科学计数法表示时,Gaussdb末尾0值会显示,M*不显示,以科学计数法打印,此为固有显示差异。非本函数所致。
    • 字符串类型:char、varchar。
    • 文本类型:tinytext、text,mediumtext、longtext。
    • 大对象类型:tinyblob、blob、mediumblob、longblob。
    • 日期类型:datetime、timestamp、date、time。 | 为输入字符串添加引号,并为反斜线\、单引号'前面加\。 |

    返回值类型:text。

    示例:

    | ``` gaussdb=# SELECT quote('hello' world'); quote -------------- 'hello' world' (1 row)

    | --------------------------------------------------------------------------------------------------- |
    
    ![](https://p6-xtjj-sign.byteimg.com/tos-cn-i-73owjymdk6/f0b01112f0c441739b28b6ed87ba6906~tplv-73owjymdk6-jj-mark-v1:0:0:0:0:5o6Y6YeR5oqA5pyv56S-5Yy6IEAgamVycnl3YW5nMTk4Mw==:q75.awebp?rk3s=f64ab15b&x-expires=1770797316&x-signature=YzTO4xpvklHHhMKcA2Ur3i2ZtGU%3D)
    
    1.  函数仅在参数sql_compatibility='MYSQL'时生效;
    
    1.  开启GUC参数:
    
        ```
        SET standard_conforming_strings=off;
        SET escape_string_warning=off;
        SET backslash_quote=on;
        ```
    
    1.  已知str字符串中含有\Z、\r、\%、\_,GaussDB未进行转义,与MYSQL存在差异。斜线后跟部分数字也会引起差异,如\563。由转义字符引起的本函数与MYSQL的差异,此为GaussDB与MYSQL的转义字符差异,与本函数无关。
    
    1.  str字符串中的\b,输出结果表现形式与MYSQL有差异。此为GaussDB与MYSQL的固有差异,与本函数无关。
    
    1.  str字符串中含有\0时,GaussDB由于UTF-8字符集不识别该字符,输入不成功。此为GaussDB与MYSQL的固有差异,与本函数无关。
    
    1.  str为bit或bool类型时,由于GaussDB与MYSQL此类型目前有差异,暂不支持此类类型。
    
    1.  GaussDB最大支持1GB数据传输,str入参长度最大支持536870908,函数返回结果字符串最大支持1GB。
    
    
  • quote_ident(string text)

    描述:返回适用于SQL语句的标识符形式(使用适当的引号进行界定)。只有在必要的时候才会添加引号(字符串包含非标识符字符或者会转换大小写的字符)。返回值中嵌入的引号都写了两次。

    返回值类型:text。

    示例:

    | ``` gaussdb=# SELECT quote_ident('hello world'); quote_ident -------------- "hello world" (1 row)

    | -------------------------------------------------------------------------------------------------------- |
    
    
  • quote_literal(string text)

    描述:返回适用于在SQL语句里当作文本使用的形式(使用适当的引号进行界定)。

    支持显式转换成字符类型后的XML类型数据。

    返回值类型:text。

    示例:

    | ``` gaussdb=# SELECT quote_literal('hello'); quote_literal --------------- 'hello' (1 row)

    | -------------------------------------------------------------------------------------------------- |
    
    如果出现如下写法,text文本将进行转义。
    
    | ```
    gaussdb=# SELECT quote_literal(E'O'hello');  quote_literal ---------------  'O''hello' (1 row) 
    ``` |
    | -------------------------------------------------------------------------------------------------------- |
    
    如果出现如下写法,反斜杠会写入两次。
    
    | ```
    gaussdb=# SELECT quote_literal('O\hello');  quote_literal  ---------------  E'O\hello' (1 row) 
    ``` |
    | -------------------------------------------------------------------------------------------------------- |
    
    如果参数为NULL,返回空。如果参数可能为null,通常使用函数quote_nullable更适用。
    
    | ```
    gaussdb=# SELECT quote_literal(NULL);  quote_literal  ---------------  (1 row) 
    ``` |
    | --------------------------------------------------------------------------------------- |
    
    
  • quote_literal(value anyelement)

    描述:将给定的值强制转换为text,加上引号作为文本。

    返回值类型:text。

    示例:

    | ``` gaussdb=# SELECT quote_literal(42.5); quote_literal --------------- '42.5' (1 row)

    | ---------------------------------------------------------------------------------------------- |
    
    如果出现如下写法,定值将进行转义。
    
    | ```
    gaussdb=# SELECT quote_literal(E'O'42.5');  quote_literal ---------------  '0''42.5' (1 row) 
    ``` |
    | ------------------------------------------------------------------------------------------------------ |
    
    如果出现如下写法,反斜杠会写入两次。
    
    | ```
    gaussdb=# SELECT quote_literal('O\42.5');  quote_literal  ---------------  E'O\42.5' (1 row) 
    ``` |
    | ------------------------------------------------------------------------------------------------------ |
    
    
  • quote_nullable(string text)

    描述:返回适用于在SQL语句里当作字符串使用的形式(使用适当的引号进行界定)。

    支持显式转换成字符类型后的XML类型数据。

    返回值类型:text。

    示例:

    | ``` gaussdb=# SELECT quote_nullable('hello'); quote_nullable ---------------- 'hello' (1 row)

    | ----------------------------------------------------------------------------------------------------- |
    
    如果出现如下写法,text文本将进行转义。
    
    | ```
    gaussdb=# SELECT quote_nullable(E'O'hello');  quote_nullable ----------------  'O''hello' (1 row) 
    ``` |
    | ----------------------------------------------------------------------------------------------------------- |
    
    如果出现如下写法,反斜杠会写入两次。
    
    | ```
    gaussdb=# SELECT quote_nullable('O\hello');  quote_nullable ----------------  E'O\hello' (1 row) 
    ``` |
    | ---------------------------------------------------------------------------------------------------------- |
    
    如果参数为NULL,返回NULL。
    
    | ```
    gaussdb=# SELECT quote_nullable(NULL);  quote_nullable ----------------  NULL (1 row) 
    ``` |
    | ---------------------------------------------------------------------------------------------- |
    
    
  • quote_nullable(value anyelement)

    描述:将给定的参数值转换为text,加上引号作为文本。

    返回值类型:text。

    示例:

    | ``` gaussdb=# SELECT quote_nullable(42.5); quote_nullable ---------------- '42.5' (1 row)

    | ------------------------------------------------------------------------------------------------ |
    
    如果出现如下写法,定值将进行转义。
    
    | ```
    gaussdb=# SELECT quote_nullable(E'O'42.5');  quote_nullable  ----------------  'O''42.5' (1 row) 
    ``` |
    | ---------------------------------------------------------------------------------------------------------- |
    
    如果出现如下写法,反斜杠会写入两次。
    
    | ```
    gaussdb=# SELECT quote_nullable('O\42.5');  quote_nullable ----------------  E'O\42.5' (1 row) 
    ``` |
    | -------------------------------------------------------------------------------------------------------- |
    
    如果参数为NULL,返回NULL。
    
    | ```
    gaussdb=# SELECT quote_nullable(NULL);  quote_nullable ----------------  NULL (1 row) 
    ``` |
    | ---------------------------------------------------------------------------------------------- |
    
    
  • space(count)

    描述:返回由指定数量的空格组成的字符串。

    参数说明类型描述
    count- 整数类型:tinyint、smallint、mediumint、int、bigint。
    • 无符号整数类型:tinyint unsigned、smallint unsigned、int unsigned。
    • 字符和文本类型:char,varchar、tinytext、text、mediumtext、longtext,仅支持纯数字整数字符串,且整数范围在bigint范围内。
    • 浮点类型:float、real、double。
    • 定点类型:numeric、decimal、dec。
    • 布尔类型:bool。 | 表示空格数量。 |

    返回值类型:text。

    示例:

    | ``` gaussdb=# SELECT space(5); space -------- (1 row)

    | ----------------------------------------------------------------- |
    
    ![](https://p6-xtjj-sign.byteimg.com/tos-cn-i-73owjymdk6/c11d6d5e8488423d9462b8c47bb327be~tplv-73owjymdk6-jj-mark-v1:0:0:0:0:5o6Y6YeR5oqA5pyv56S-5Yy6IEAgamVycnl3YW5nMTk4Mw==:q75.awebp?rk3s=f64ab15b&x-expires=1770797316&x-signature=ytTHvbgmbRg3tppz29nGSVbgsf4%3D)
    
    -   space函数仅在参数sql_compatibility='MYSQL'时生效。
    -   如果入参count小于1073741819且大于0,返回count个空格字符串,否则返回空字符串。
    
    
  • substring_inner(string [from int] [for int])

    描述:截取子字符串,from int表示从第几个字符开始截取,for int表示截取几个字节。

    返回值类型:text。

    示例:

    | ``` gaussdb=# SELECT substring_inner('adcde', 2,3); substring_inner ----------------- dcd (1 row)

    | -------------------------------------------------------------------------------------------------------- |
    
    
  • substring(string [from int] [for int])

    描述:截取子字符串,from int表示从第几个字符开始截取,for int表示截取几个字节。

    返回值类型:text。

    示例:

    | ``` gaussdb=# SELECT substring('Thomas' from 2 for 3); substring ----------- hom (1 row)

    | ----------------------------------------------------------------------------------------------- |
    
    ![](https://p6-xtjj-sign.byteimg.com/tos-cn-i-73owjymdk6/b10102a088864e0bbf45b712f1a32e9a~tplv-73owjymdk6-jj-mark-v1:0:0:0:0:5o6Y6YeR5oqA5pyv56S-5Yy6IEAgamVycnl3YW5nMTk4Mw==:q75.awebp?rk3s=f64ab15b&x-expires=1770797316&x-signature=aZR9TOoVru3GnbMm4nRCVEGRYzg%3D)
    
    此函数在MYSQL模式数据库中,且GUC参数 b_format_version = '5.7'和b_format_dev_version = 's1'时[from int]可以为负数,此时表示从后往前数的第几个字符,不设置参数时[from int]为负数结果为空。
    
    
  • substring(string, pos, len)

    描述:截取子字符串,pos表示从第几个字符开始截取,len表示截取几个字节。

    参数:

    参数说明类型描述取值范围
    stringtext需要被截取的字符串。-
    posint需要被截取字符串的起点。绝对值小于字符串长度。
    lenint需要被截取字符串的长度。大于0。

    返回值类型:text。

    示例:

    | ``` gaussdb=# SELECT substring('substrteststring', -5, 5); substring ----------- tring (1 row)

    | ----------------------------------------------------------------------------------------------------- |
    
    ![](https://p6-xtjj-sign.byteimg.com/tos-cn-i-73owjymdk6/f5d7b01305c84ccaa89a5c47c5b7ae55~tplv-73owjymdk6-jj-mark-v1:0:0:0:0:5o6Y6YeR5oqA5pyv56S-5Yy6IEAgamVycnl3YW5nMTk4Mw==:q75.awebp?rk3s=f64ab15b&x-expires=1770797316&x-signature=VXDCMvgqNNihm2oSlHE9BSIBeKs%3D)
    
    此函数在MYSQL模式数据库中,且GUC参数 b_format_version = '5.7'和b_format_dev_version = 's1'时pos可以为负数,此时表示从后往前数的第几个字符,不设置参数时pos为负数结果为空。
    
    
  • substring_index(str,split,index)

    描述:str为字符串,split为分隔符字符串,index为str字符串被split分隔的数量位置;此函数返回第index个被split分隔的str字符串的左边/右边(index为正数则是左边,反之右边)的所有内容。

    参数:如表2所示。

    参数说明类型描述
    strtext需要被截取的字符串。
    splittext需要分割的目标字符串。
    indexint指定第index个split字符的位置,若为正数取左边所有内容,为负数取右边所有内容。

    返回值类型:text。

    示例:

    | ``` gaussdb=# SELECT substring_index('Test1splitTest2splitTest3splitTest4', 'split', 2); substring_index ----------------- Test1splitTest2 (1 row) gaussdb=# SELECT substring_index('Test1splitTest2splitTest3splitTest4', 'split', -2); substring_index ----------------- Test3splitTest4 (1 row)

    | -------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
    
    
  • substring(string from pattern)

    描述:截取匹配POSIX正则表达式的子字符串。如果没有匹配它返回空值,否则返回文本中匹配模式的那部分。

    返回值类型:text。

    示例:

    | ``` gaussdb=# SELECT substring('Thomas' from '...$'); substring ----------- mas (1 row) gaussdb=# SELECT substring('foobar' from 'o(.)b'); result -------- o (1 row) gaussdb=# SELECT substring('foobar' from '(o(.)b)'); result -------- oob (1 row)

    | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ |
    
    ![](https://p6-xtjj-sign.byteimg.com/tos-cn-i-73owjymdk6/f58d667b717e41f0893e6844b6c68efc~tplv-73owjymdk6-jj-mark-v1:0:0:0:0:5o6Y6YeR5oqA5pyv56S-5Yy6IEAgamVycnl3YW5nMTk4Mw==:q75.awebp?rk3s=f64ab15b&x-expires=1770797316&x-signature=VF%2FRlDnh4ErMzo7vrshKcGdqQVo%3D)
    
    如果POSIX正则表达式模式包含任何圆括号,那么将返回匹配第一对子表达式(对应第一个左圆括号的) 的文本。如果在表达式里使用圆括号而又不导致这种情况,那么可以在整个表达式外边放上一对圆括号。
    
    
  • substring(string from pattern for escape)

    描述:截取匹配SQL正则表达式的子字符串。声明的模式必须匹配整个数据串,否则函数失败并返回空值。为了标识在成功的时候应该返回的模式部分,模式必须包含两个逃逸字符引用的部分,并且逃逸字符后面要添加双引号(")。匹配这两个标记之间的模式的文本将被返回。

    返回值类型:text。

    示例:

    | ``` gaussdb=# SELECT substring('Thomas' from '%#"o_a#"_' for '#'); substring ----------- oma (1 row)

    | ----------------------------------------------------------------------------------------------------------- |
    
    
  • rawcat(raw,raw)

    描述:字符串拼接函数。

    返回值类型:raw。

    示例:

    | ``` gaussdb=# SELECT rawcat('ab','cd'); rawcat -------- ABCD (1 row)

    | --------------------------------------------------------------------------- |
    
    
  • regexp_like(text,text,text)

    描述:正则表达式的模式匹配函数。

    返回值类型:bool。

    示例:

    | ``` gaussdb=# SELECT regexp_like('str','[ac]'); regexp_like ------------- f (1 row)

    | ------------------------------------------------------------------------------------------ |
    
    
  • regexp_substr(string text, pattern text [, position int [, occurrence int [, flags text]]])

    描述:正则表达式的抽取子串函数。与substr功能相似,正则表达式出现多个并列的括号时,也全部处理。

    参数说明:

    • string:用于匹配的源字符串。

    • pattern:用于匹配的正则表达式模式串。

    • position:可选参数,表示从源字符串的第几个字符开始匹配,默认值为1。

    • occurrence:可选参数,表示抽取第几个满足匹配的子串,默认值为1。

    • flags:可选参数,包含零个或多个改变函数匹配行为的单字母标记。flags 支持的选项值及含义描述如表3所示。

      选项描述
      'b'按照无扩展的 BRE 规则匹配。
      'c'大小写敏感匹配。
      'e'按照扩展的 ERE 规则匹配。
      'i'大小写不敏感匹配。
      'm'多行模式匹配。flags 中包含'm' 时,按照多行模式匹配,否则按照单行模式匹配。
      'n'n选项的含义和GUC参数behavior_compat_options及数据库当前的兼容模式有关:- 数据库SQL语法兼容模式为ORA或MYSQL,且GUC参数behavior_compat_options值包含aformat_regexp_match时,n选项表示“.”能够匹配换行符('\n');flags未指定'n'选项时,“.”不会匹配换行符。
      • 其他情况下,'n'选项和'm'选项的含义一样。 | | 'p' | 部分新行敏感的匹配,影响'.'和方括号表达式,和新行敏感的匹配('m'或'n')一样,但是不影响^和$。 | | 'q' | 普通字符匹配。 | | 's' | 单行模式匹配,含义与'm'、'n'相反。 | | 't' | 紧凑模式匹配,空白符匹配自身。 | | 'w' | 逆部分新行匹配,与'p'含义相反。 | | 'x' | 宽松模式匹配,忽略空白符。 |

      返回值类型:text。

      示例:

      | ``` gaussdb=# SELECT regexp_substr('str','[ac]'); regexp_substr --------------- (1 row) gaussdb=# SELECT regexp_substr('foobarbaz', 'b(..)', 3, 2) AS RESULT; result -------- baz (1 row)

      | --------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
      
      
  • regexp_count(string text, pattern text [, position int [, flags text]])

    描述:获取满足匹配的子串个数。

    参数说明:

    • string:用于匹配的源字符串。
    • pattern:用于匹配的正则表达式模式串。
    • position:表示从源字符串的第几个字符开始匹配,为可选参数,默认值为1。
    • flags:可选参数,包含零个或多个改变函数匹配行为的单字母标记。flags 支持的选项值及含义描述如表3所示。

    此函数在ORA兼容模式数据库中且参数a_format_version值为10c和a_format_dev_version值为s1的情况下,以''结尾的pattern参数为合法的。

    返回值类型:int。

    示例:

    gaussdb=# SELECT regexp_count('foobarbaz','b(..)', 5) AS RESULT;
    result
    --------
    1
    (1 row)
    
  • regexp_instr(string text, pattern text [, position int [, occurrence int [, return_opt int [, flags text]]]])

    描述:获取满足匹配条件的子串位置(从1开始)。如果没有匹配的子串,则返回0。

    参数说明:

    • string:用于匹配的源字符串。
    • pattern:用于匹配的正则表达式模式串。
    • position:可选参数,表示从源字符串的第几个字符开始匹配,默认值为1。
    • occurrence:可选参数,表示获取第occurrence个匹配子串的位置,默认值为1。
    • return_opt:可选参数,用于控制返回匹配子串的首字符位置还是尾字符位置。取值为0时,返回匹配子串的第一个字符的位置(从1开始计算),取值为大于0的值时,返回匹配子串的尾字符的下一个字符的位置。默认值为0。
    • flags:可选参数,包含零个或多个改变函数匹配行为的单字母标记。flags 支持的选项值及含义描述如表3所示。

    返回值类型:int。

    示例:

    gaussdb=# SELECT regexp_instr('foobarbaz','b(..)', 1, 1, 0) AS RESULT;
    result
    --------
    4
    (1 row)
    
    gaussdb=# SELECT regexp_instr('foobarbaz','b(..)', 1, 2, 0) AS RESULT;
    result
    --------
    7
    (1 row)
    
  • regexp_matches(string text, pattern text [, flags text])

    描述:返回string中所有匹配POSIX正则表达式的子字符串。如果pattern不匹配,该函数不返回行。如果模式不包含圆括号子表达式,则每一个被返回的行都是一个单一元素的文本数组,其中包括匹配整个模式的子串。如果模式包含圆括号子表达式,该函数返回一个文本数组,它的第n个元素是匹配模式的第n个圆括号子表达式的子串。

    flags参数为可选参数,包含零个或多个改变函数行为的单字母标记。i表示进行大小写无关的匹配,g表示替换每一个匹配的子字符串而不仅仅是第一个。

    NOTICE:

    如果提供了最后一个参数,但参数值是空字符串(''),且数据库SQL兼容模式设置为ORA的情况下,会导致返回结果为空集。这是因为ORA兼容模式将''作为NULL处理,避免此类行为的方式有如下几种:

    • 将数据库SQL兼容模式改为TD;
    • 不提供最后一个参数,或最后一个参数不为空字符串。

    返回值类型:setof text[]。

    示例:

    | ``` gaussdb=# SELECT regexp_matches('foobarbequebaz', '(bar)(beque)'); regexp_matches ---------------- {bar,beque} (1 row) gaussdb=# SELECT regexp_matches('foobarbequebaz', 'barbeque'); regexp_matches ---------------- {barbeque} (1 row) gaussdb=# SELECT regexp_matches('foobarbequebazilbarfbonk', '(b[^b]+)(b[^b]+)', 'g'); regexp_matches ---------------- {bar,beque} {bazil,barf} (2 rows)

    | ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
    
    
  • regexp_match(string text, pattern text [, flags text])

    描述:返回一个字符串数组,为POSIX正则表达式与字符串第一个匹配所得到的子串。如果pattern不匹配,该函数返回空行。如果模式不包含圆括号子表达式,则每一个被返回的行都是一个单一元素的文本数组,其中包括匹配整个模式的子串。如果模式包含圆括号子表达式,该函数返回一个文本数组,它的第n个元素是匹配模式的第n个圆括号子表达式的子串。

    flags参数为可选参数,不带flags默认使用紧语法匹配。flags参数包含零个或多个改变函数行为的单字母标记,支持的标记如下表所示。

    选项描述
    'b'POSIX正则表达式变为BRE(基础正则表达式)。
    'c'大小写敏感的匹配。
    'e'POSIX正则表达式变为ERE(扩展正则表达式)。
    'i'大小写不敏感的匹配,即在匹配时不区分大小写。
    'n'新行敏感的匹配,将字符串视为多行,^和$匹配每行的开头和结尾,(.)不可以匹配换行。
    'm'新行敏感的匹配,将字符串视为多行,^和$匹配每行的开头和结尾,(.)不可以匹配换行,n的匹配模式一致。
    'p'部分新行敏感的匹配,单行的开头和结尾,(.)不能匹配换行符,^只能匹配第一行开头,$只能匹配最后一行末尾。
    'q'将正则表达式视为一个文本字符串,所有都是普通字符。
    's'非新行敏感匹配,即将字符串视为单行,^和$匹配单行的开头和结尾,此模式下,正则表达式中的点号(.)可以匹配任何字符,包括换行符。
    't'紧语法匹配。
    'w'逆部分新行敏感的匹配,正则表达式中^匹配每行的开头,$只能匹配最后一行的结尾,(.)可以匹配任何字符,包括换行符。
    'x'扩展语法匹配,忽略RE中的空白字符和注释。以下三种场景除外:- 前置了\的空白字符或#将被保留。
    • 方括号中的空白字符或#将被保留。
    • 在多字符符号里面不能出现空白和注释,例如“(?:”。 |

    NOTICE:

    如果参数中存在空字符串(''),且数据库兼容模式设置为ORA的情况下,会导致返回结果为NULL,原因是ORA兼容模式下空字符串将''作为NULL处理。

    返回值类型:setof text[]。

    示例:

    gaussdb=# SELECT regexp_match('foobarbequebaz', '(bar)(beque)');
     regexp_match
    --------------
     {bar,beque}
    (1 row)
    gaussdb=# SELECT (regexp_match('foobarbequebaz', 'bar.*que'))[1];
     regexp_match
    --------------
     barbeque
    (1 row)
    gaussdb=# SELECT regexp_match('Learning #PostgreSQL', 'R', 'c');
     regexp_match
    --------------
    
    (1 row)
    gaussdb=# SELECT regexp_match('hello world', 'h e l l o', 'x');
     regexp_match
    --------------
     {hello}
    (1 row)
    
  • regexp_split_to_array(string text, pattern text [, flags text ])

    描述:用POSIX正则表达式作为分隔符,分隔string。和regexp_split_to_table相同,不过regexp_split_to_array会把它的结果以一个text数组的形式返回。

    返回值类型:text[]。

    示例:

    | ``` gaussdb=# SELECT regexp_split_to_array('hello world', E'\s+'); regexp_split_to_array ----------------------- {hello,world} (1 row)

    | ---------------------------------------------------------------------------------------------------------------------------------------------- |
    
    
  • regexp_split_to_table(string text, pattern text [, flags text])

    描述:用POSIX正则表达式作为分隔符,分隔string。如果没有与pattern的匹配,该函数返回string。如果至少有一个匹配,对每一个匹配,它都返回从上一个匹配的末尾(或者串的开头)到这次匹配开头之间的文本。当没有更多匹配时,它返回从上一次匹配的末尾到串末尾之间的文本。

    flags参数包含零个或多个改变函数行为的单字母标记。i表示进行大小写无关的匹配,默认替换每一个匹配的子字符串,而不仅仅是替换第一个子字符串。

    返回值类型:setof text。

    示例:

    | ``` gaussdb=# SELECT regexp_split_to_table('hello world', E'\s+'); regexp_split_to_table ----------------------- hello world (2 rows)

    | ---------------------------------------------------------------------------------------------------------------------------------------------- |
    
    
  • repeat(string text, number int )

    描述:将string重复number次。

    返回值类型:text。

    示例:

    | ``` gaussdb=# SELECT repeat('Pg', 4); repeat ---------- PgPgPgPg (1 row)

    | -------------------------------------------------------------------------------- |
    
    ![](https://p6-xtjj-sign.byteimg.com/tos-cn-i-73owjymdk6/a7714bc9940d43dd9f5c1b16bd92e47f~tplv-73owjymdk6-jj-mark-v1:0:0:0:0:5o6Y6YeR5oqA5pyv56S-5Yy6IEAgamVycnl3YW5nMTk4Mw==:q75.awebp?rk3s=f64ab15b&x-expires=1770797316&x-signature=GesL8yil8BGm5e9CjadNm8S2XJs%3D)
    
    由于数据库内存分配机制限制单次内存分配不可超过1GB,因此number最大值不应超过(1G-x)/lengthb(string) - 1。x为头信息长度,通常大于4字节,其具体值在不同的场景下存在差异。
    
    
  • replace(string text, from text, to text)

    描述:把字符串string里出现的所有子字符串from的内容替换成子字符串to的内容。

    返回值类型:text。

    示例:

    | ``` gaussdb=# SELECT replace('abcdefabcdef', 'cd', 'XXX'); replace ---------------- abXXXefabXXXef (1 row)

    | ------------------------------------------------------------------------------------------------------------------------- |
    
  • replace(string, substring)

    描述:删除字符串string里出现的所有子字符串substring的内容。

    string类型:text。

    substring类型:text。

    返回值类型:text。

    示例:

    | ``` gaussdb=# SELECT replace('abcdefabcdef', 'cd'); replace ---------------- abefabef (1 row)

    | ------------------------------------------------------------------------------------------------------------ |
    
    
  • reverse(str)

    描述:返回颠倒的字符串(按字符颠倒)。

    返回值类型:text。

    示例:

    | ``` gaussdb=# SELECT reverse('abcde'); reverse --------- edcba (1 row)

    | ----------------------------------------------------------------------------- |
    
    
  • right(str text, n int)

    描述:返回字符串中的后n个字符。当n是负值时,返回除前|n|个字符以外的所有字符。

    返回值类型:text。

    示例:

    | ``` gaussdb=# SELECT right('abcde', 2); right ------- de (1 row) gaussdb=# SELECT right('abcde', -2); right ------- cde (1 row)

    | ------------------------------------------------------------------------------------------------------------------------------------------ |
    
    
  • rpad(string text, length int [, fill text])

    描述:使用填充字符fill(缺省时为空白),把string填充到length长度。如果string已经比length长则将其从尾部截断。

    返回值类型:text。

    此函数在ORA兼容模式数据库中且参数a_format_version值为10c和a_format_dev_version值为s1的情况下:

    • 参数length表示字符串显示长度,单个字符的显示长度按照O兼容处理。
    • 函数执行过程中出现length剩余长度为1且下一个字符显示长度为2,在字符串右侧添加一个空格字符。
    • 参数length入参若为小数则不会被四舍五入,而是被截断。
    • 参数string与fill不支持不符合编码规范的输入。

    在其他情况下:

    • 参数length表示字符串中字符总长度,单个字符的长度固定为1。
    • 参数length入参若为小数则被四舍五入。
    • 参数string与fill不支持不符合编码规范的输入。

    示例:

    | ``` --一般情况单个字符长度为1。 gaussdb=# CREATE DATABASE db_test1 ENCODING = 'UTF8'; gaussdb=# \c db_test1 db_test1=# SELECT rpad('expr1', 7, '中国')||''; ?column? ------------ expr1中国 (1 row) --在ORA兼容模式且参数a_format_version值为10c和a_format_dev_version值为s1的情况下。 db_test1=# CREATE DATABASE db_test2 DBCOMPATIBILITY = 'ORA' ENCODING = 'UTF8'; db_test1=# \c db_test2 db_test2=# SET a_format_version = '10c'; db_test2=# SET a_format_dev_version = 's1'; db_test2=# SELECT rpad('expr1', 7, '中国')||''; ?column? ---------- expr1中 (1 row) db_test2=# SELECT rpad('expr1', 8, '中国')||'*'; ?column? ----------- expr1中 * (1 row) --切换至默认数据库,删除数据库。请根据实际情况修改数据库名。 db_test2=# \c postgres gaussdb=# DROP DATABASE db_test1; gaussdb=# DROP DATABASE db_test2;

    | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
    
    
  • substrb(text,int,int)

    描述:提取子字符串,第一个int表示提取的起始位置,第二个表示提取几位字符。

    返回值类型:text。

    示例:

    | ``` gaussdb=# SELECT substrb('string',2,3); substrb --------- tri (1 row)

    | -------------------------------------------------------------------------------- |
    
    
  • substrb(text,int)

    描述:提取子字符串,int表示提取的起始位置。

    返回值类型:text。

    示例:

    | ``` gaussdb=# SELECT substrb('string',2); substrb --------- tring (1 row)

    | -------------------------------------------------------------------------------- |
    
    
  • substr(text,int)/substr(str FROM pos)

    描述:其中str为目标字符串,pos为字符串中的位置。输出str从pos位置开始到字符结束的字符串。

    返回值类型:text。

    示例:

    | ``` gaussdb=# SELECT substr('stringtest' from 4); substr --------- ingtest (1 row) gaussdb=# SELECT substr('stringtest', 4); substr --------- ingtest (1 row)

    | --------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
    
    
  • substr(str FROM pos FOR len)

    描述:提取子字符串,第一个int表示提取的起始位置,第二个表示提取几位字符。pos可以是负数,如果为负数,则从后往前提取。

    返回值类型:text。

    示例:

    | ``` gaussdb=# SELECT substr('teststring' from 5 for 2); substr -------- st (1 row)

    | ------------------------------------------------------------------------------------------ |
    
    
  • substr(bytea,from,count)

    描述:从参数bytea中抽取子字符串。from表示抽取的起始位置,count表示抽取的子字符串长度。

    返回值类型:text。

    示例:

    | ``` gaussdb=# SELECT substr('string',2,3); substr -------- tri (1 row)

    | ----------------------------------------------------------------------------- |
    
    
  • string || string

    描述:连接字符串。

    返回值类型:text。

    示例:

    | ``` gaussdb=# SELECT 'MPP'||'DB' AS RESULT; result -------- MPPDB (1 row)

    | --------------------------------------------------------------------------------- |
    
    
  • string || non-string或non-string || string

    描述:连接字符串和非字符串。

    返回值类型:text。

    示例:

    | ``` gaussdb=# SELECT 'Value: '||42 AS RESULT; result ----------- Value: 42 (1 row)

    | --------------------------------------------------------------------------------------------- |
    
    
  • split_part(string text, delimiter text, field int)

    描述:根据delimiter分隔string返回生成的第field个子字符串(从出现第一个delimiter的text为基础)。

    返回值类型:text。

    示例:

    | ``` gaussdb=# SELECT split_part('abc~@def@ghi', '@~', 2); split_part ------------ def (1 row)

    | -------------------------------------------------------------------------------------------------------- |
    
    
  • strpos(string, substring)

    描述:指定的子字符串的位置。和position(substring in string)一样,不过参数顺序相反。

    返回值类型:int。

    示例:

    | ``` gaussdb=# SELECT strpos('source', 'rc'); strpos -------- 4 (1 row)

    | ---------------------------------------------------------------------------------- |
    
    
  • to_hex(number int or bigint)

    描述:把number转换成十六进制表现形式。

    返回值类型:text。

    示例:

    | ``` gaussdb=# SELECT to_hex(2147483647); to_hex ---------- 7fffffff (1 row)

    | ----------------------------------------------------------------------------------- |
    
    
  • translate(string text, from text, to text)

    描述:把在string中包含的任何匹配from中的字符转换为对应的在to中的字符。如果from比to长,删掉在from中出现的额外的字符。

    返回值类型:text。

    示例:

    | ``` gaussdb=# SELECT translate('12345', '143', 'ax'); translate ----------- a2x5 (1 row)

    | ----------------------------------------------------------------------------------------------- |
    
  • length(string)

    描述:获取参数string中字符的数目。当sql_compatibility = 'MYSQL'时,设置参数b_format_version = '5.7'、b_format_dev_version = 's1'后,string为字符串类型或文本类型时,返回string的字节数。

    返回值类型:integer。

    示例:

    | ``` gaussdb=# SELECT length('abcd'); length -------- 4 (1 row) gaussdb=# SELECT length('汉字abc'); length -------- 5 (1 row) gaussdb=# CREATE DATABASE gaussdb_m WITH dbcompatibility 'MYSQL'; gaussdb=# \c gaussdb_m --设置兼容版本控制参数。 gaussdb_m=# SET b_format_version='5.7'; gaussdb_m=# SET b_format_dev_version='s1'; gaussdb_m=# SELECT length('汉字abc'); length -------- 9 (1 row) --切换至默认数据库,删除gaussdb_m数据库(需切换至默认数据库,请根据实际情况修改数据库名)。 gaussdb_m=# \c postgres gaussdb=# DROP DATABASE gaussdb_m; gaussdb=# RESET ALL;

    | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ |
    
    
    

更多详情请参考GaussDB 文档中心:doc.hcs.huawei.com/db/zh-cn/ga…