更新时间:2025-09-12 GMT+08:00
分享

字符串函数

M-Compatibility提供字符串函数对字符串进行处理。

  • 对于对字符串位置进行操作的函数,第一个位置的编号为1。
  • 对于使用了长度作为参数的函数,非整数的参数将四舍五入到最接近的整数。
  • 如果数据库字符集是SQL_ASCII,数据库将把字节值0-127根据 ASCII标准解释,而字节值128-255则当作无法解析的字符。如果设置为SQL_ASCII,数据库将无法转换或者校验非ASCII字符,导致CHAR_LENGTH、FIND_IN_SET、LEFT、LOWER、REVERSE、RIGHT、STRCMP、TRIM等字符串函数产生未预期的结果。如果使用了任意非ASCII数据,都不建议将数据库的字符集设置为SQL_ASCII。

ASCII

ASCII(str)

描述:返回字符串str最左侧字符的ASCII码值,str为空字符串时返回0,str为NULL时返回NULL。

返回值类型:INT

示例:

m_db=# SELECT ASCII('');
 ascii 
-------
     0
(1 row)

m_db=# SELECT ASCII('abc');
 ascii 
-------
    97
(1 row)

m_db=# SELECT ASCII(NULL);
 ascii 
-------

(1 row)

BIN

BIN(INT N)

描述:返回N的二进制值的字符串表示形式,与CONV(N,10,2)功能相同。

返回值类型:TEXT

示例:

m_db=# SELECT BIN(12);
 bin  
------
 1100
(1 row)

BIT_LENGTH

BIT_LENGTH(str)

描述:返回字符串str的比特位长度。

返回值类型:BIGINT

示例:

m_db=# SELECT BIT_LENGTH('text');
 bit_length 
------------
         32
(1 row)

CHAR

CHAR(INT N,... [USING charset_name])

描述:将每个参数N通过ASCII码转换成对应的字符。其中charset_name为字符集名称。

返回值类型:TEXT/BLOB

示例:

m_db=# SELECT CHAR(71,97,117,115,115);
 char  
-------
 Gauss
(1 row)

m_db=# SELECT CHAR(71,97,117,115,115 using utf8);
 char  
-------
 Gauss
(1 row)

CHAR_LENGTH

CHAR_LENGTH(str)

描述:返回字符串str包含的字符数,多字节的字符会被计为1个字符。例如,输入2个2字节的字符,LENGTH()返回4,而CHAR_LENGTH()返回2。

返回值类型:BIGINT

示例:

m_db=# SELECT CHAR_LENGTH('text');
 char_length 
-------------
           4
(1 row)

CHARACTER_LENGTH

CHARACTER_LENGTH(str)

描述:与CHAR_LENGTH功能、用法相同。

返回值类型:BIGINT

示例:

m_db=# SELECT CHARACTER_LENGTH('text');
 character_length 
------------------
                4
(1 row)

COMPRESS

COMPRESS (TEXT string_to_compress)

描述:压缩一个字符串,返回二进制字符串类型的结果。

返回值类型:LONGBLOB

示例:

m_db=# SELECT HEX(COMPRESS('abcde'));
       HEX(COMPRESS('abcde'))       
------------------------------------
 05000000789C4B4C4A4E49050005C801F0
(1 row)

CONCAT

CONCAT(str1, str2, ..., strN)

描述:接受若干个字符串,按顺序将其拼接并返回拼接后的字符串。如果有一个字符串为NULL,则返回NULL。

返回值类型:TEXT/BLOB

示例:

m_db=# SELECT CONCAT('hello', 'world', '!');
   concat    
-------------
 helloworld!
(1 row)

m_db=# SELECT CONCAT('hello', NULL, '!');
 concat 
--------

(1 row)

CONCAT_WS

CONCAT_WS(separator, str1, str2, ..., strN)

描述:把多个字符串按顺序进行拼接,相邻字符串使用separator进行分割。当separator为NULL时,返回NULL。当待拼接的字符串为NULL时,将被忽略。

返回值类型:TEXT/BLOB

示例:

m_db=# SELECT CONCAT_WS(',', 'hello', NULL, 'world', '!');
   concat_ws   
---------------
 hello,world,!
(1 row)

m_db=# SELECT CONCAT_WS(NULL, 'hello', NULL, 'world', '!');
 concat_ws 
-----------

(1 row)

ELT

ELT(INT N, TEXT str1, TEXT str2, TEXT str3, ...)

描述:返回字符串列表的第N个元素。如果N为空、小于1、大于字符串总个数或者N位置处的字符串为NULL,则返回NULL。

参数说明:

N:用于指定位置。

str1, str2, str3, …:表示字符串参数列表,参数最大个数为8192。

返回值类型:TEXT/BLOB

示例:

m_db=# SELECT ELT (1,'a');
 elt 
-----
 a
(1 row)

m_db=# SELECT ELT (2,'a', 'b');
 elt 
-----
 b
(1 row)

EXPORT_SET

EXPORT_SET (INT bits, TEXT on, TEXT off[, TEXT separator[, INT length]])

描述:根据参数的二进制位生成一个使用指定分隔符拼接的字符串,如果length不指定或者指定范围不在[0,64],length采用64位。将bits转换成二进制,如果bit位是1,采用on指定的字符串,如果bit位是0,采用off指定的字符串,中间使用separator指定的字符串隔离,separator不指定默认使用逗号(,)为隔离符。返回值的长度受GUC参数max_allowed_packet的影响,最大取值为Min(max_allowed_packet, 1073741819)。

参数说明:如表1所示。

表1 EXPORT_SET函数参数说明

名称

描述

bits

必选,一个数字, bits中的比特值按照从右到左的顺序依次决定on或者off出现在该位置。

on

必选,当对应bit的比特位值为1时,使用的字符串。

off

必选,当对应bit的比特位值为0时,使用的字符串。

separator

可选,分隔字符串,默认值为逗号(,)。

length

可选,集合的元素个数,默认值为64。

返回值类型:TEXT

示例:

m_db=# SELECT EXPORT_SET(5, 'Y', 'N');
                                                           export_set                                                            
---------------------------------------------------------------------------------------------------------------------------------
 Y,N,Y,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N

m_db=# SELECT EXPORT_SET(5,'Y','N','|');
                                                           export_set                                                            
---------------------------------------------------------------------------------------------------------------------------------
 Y|N|Y|N|N|N|N|N|N|N|N|N|N|N|N|N|N|N|N|N|N|N|N|N|N|N|N|N|N|N|N|N|N|N|N|N|N|N|N|N|N|N|N|N|N|N|N|N|N|N|N|N|N|N|N|N|N|N|N|N|N|N|N|N
(1 row)

m_db=# SELECT EXPORT_SET(5,'Y','N','|', 5);
 export_set 
------------
 Y|N|Y|N|N
(1 row)

FIELD

FIELD(str, str1, str2, str3, ...)

描述:field函数返回str在str1、str2、str3等列表中的位置。从1开始递增,返回0表示str不在str1、str2、str3等列表中。

返回值类型:bigint
  • 如果str为NULL或者不在str1、str2、str3等列表时,直接返回0。
  • 函数入参全部为数字时按照数字进行比较,入参全部为非数字类型时按照字符串进行比较,入参存在数字和非数字混合时按照DOUBLE类型进行比较。

示例:

m_db=# SELECT FIELD(1,2,1);
 field 
------
     2
(1 row)

m_db=# SELECT FIELD('a','b','a');
 field 
------
     2
(1 row)

m_db=# SELECT FIELD('a',1,'b','a');
 field 
------
     2
(1 row)

FIND_IN_SET

FIND_IN_SET(str, strlist)

描述:返回字符串str在字符串列表strlist中的位置,从1开始。字符串列表是1个包含若干个子字符串的字符串,各个子字符串之间使用逗号“,”进行分隔。

返回值类型:INT
  • 如果strlist中不包含str,返回0。
  • 如果str或strlist为NULL,则返回NULL。
  • 如果str中包含逗号,则返回0。

示例:

m_db=# SELECT FIND_IN_SET('e', 'a,b,c;d,e');
 find_in_set 
-------------
           4
(1 row)

m_db=# SELECT FIND_IN_SET('a,', 'a,b,c;d,e');
 find_in_set 
-------------
           0
(1 row)

m_db=# SELECT FIND_IN_SET(NULL, 'a,b,c;d,e');
 find_in_set 
-------------

(1 row)

FORMAT

FORMAT(INT X , INT D [, TEXT locale])

描述:将数字X格式化为指定格式(#,###,###.##),并按照指定的D进行四舍五入到小数点后D位,将结果作为字符串返回。如果D为0,则结果没有小数点或小数部分,如果X或D为NULL,则返回结果NULL。

参数:

X:必选,表示被格式化的数字。

D:必选,表示保留的小数位数。

locale:可选,表示特定的语言环境。

返回值类型:TEXT

  • 此函数在参数m_format_dev_version值为's2'或以上版本且参数m_format_behavior_compat_options值包含'enable_conflict_funcs'的情况下为M-Compatibility兼容模式数据库实现行为,即本章节描述的行为;其他行为和《开发指南》中的“SQL参考 > 函数和操作符 > 数字操作函数和操作符”章节中的ceil函数保持一致。
  • 在非M-Compatibility兼容模式数据库实现行为下,入参类型为M-Compatibility兼容模式所独有的数据类型时(例如BIGINT UNSIGNED),使用该函数结果可能存在异常。

示例:

m_db=# SELECT FORMAT(12332.123456, 4);
   format    
-------------
 12,332.1235
(1 row)

m_db=# SELECT FORMAT(12332.123456,4,'de_DE');
   format    
-------------
 12.332,1235
(1 row)

FROM_BASE64

FROM_BASE64(TEXT str)

描述:对通过TO_BASE64()返回的字符串进行解码,并将结果作为二进制字符串返回。返回值的长度受GUC参数max_allowed_packet的影响,最大取值为Min(max_allowed_packet, 1073741819)。

返回值类型:LONGBLOB

示例:

m_db=# SELECT FROM_BASE64('R2F1c3M=');
 from_base64 
-------------
 Gauss
(1 row)

HEX

  • HEX(str)

    描述:将字符串str转换为十六进制字符串,str中的每个字符的每个字节都转换为两个十六进制数字,其逆运算为UNHEX

    返回值类型:TEXT

    示例:

    m_db=# SELECT HEX('abc'), UNHEX(HEX('abc'));
      hex   | unhex 
    --------+-------
     616263 | abc
    (1 row)
  • HEX(N)

    描述:将数字N转换为十六进制字符串。

    返回值类型:TEXT

    示例:

    m_db=# SELECT HEX(255);
     hex 
    -----
     FF
    (1 row)

INSERT

INSERT(str,pos,len,newstr)

描述:使用newstr将str内从pos位置开始的len个字符长度的内容进行替换后输出。

参数

类型

描述

str

TEXT

原始字符串

pos

INT

替换起始位置

len

INT

替换长度

newstr

TEXT

替换的子字符串

返回值类型:VARCHAR/VARBINARY/LONGTEXT/LONBLOB

示例:

m_db=# SELECT INSERT('abcdefg',2,3,'mmm');
 insert  
---------
 ammmefg
(1 row)

--入参中任一参数为NULL时,函数返回NULL。
m_db=# SELECT INSERT(NULL, 2, 4, 'yyy');
 insert
--------
(1 row)

--位置信息异常时,返回原字符串。
m_db=# SELECT INSERT('abcdefg', -100, 4, 'yyy');
 insert 
---------
 abcdefg
(1 row)

INSTR

INSTR(str,substr)

描述:返回substr在str中第一次出现的位置。

参数

类型

描述

str

TEXT

原始字符串

substr

TEXT

待查找的子字符串

返回值类型:INT

示例:

m_db=# SELECT INSTR('absbbsod','bs');
 instr('absbbsod','bs') 
------------------------
                      2
(1 row)

--入参含NULL时,函数返回NULL。
m_db=# SELECT INSTR('abcd12abc',null);
 instr
-------
(1 row)

LCASE

LCASE(str)

描述:将字符串中的大写字符转换为小写字母。LCASE与LOWER功能、用法一致。

返回值类型:TEXT/BLOB

示例:

m_db=# SELECT LCASE('Hello,world!');
    lcase     
--------------
 hello,world!
(1 row)

LEFT

LEFT(str, len)

描述:返回字符串str最左侧的len个字符,如果str或len为NULL,返回NULL。

返回值类型:TEXT/BLOB

示例:

m_db=# SELECT LEFT('abcdef', 3);
 left 
------
 abc
(1 row)

m_db=# SELECT LEFT('abcdef', NULL);
 left 
------

(1 row)

m_db=# SELECT LEFT('abcdef', 11);
  left  
--------
 abcdef
(1 row)

LENGTH

LENGTH(str)

描述:返回字符串str包含的字节数,多字节的字符会被计为多个字节。例如,输入2个2字节的字符,LENGTH()返回4,而CHAR_LENGTH()返回2。

返回值类型:BIGINT

示例:

m_db=# SELECT LENGTH('text');
 char_length 
-------------
           4
(1 row)

LOCATE

LOCATE(TEXT substr, TEXT str[, INT pos])

描述:返回字符串substr在字符串str中第一次出现的位置,从位置pos(默认为1)开始计算。如果在str中无法匹配到substr,则返回0。

参数:

substr:必选,表示要搜索的子字符串。

str:必选,表示将被搜索的字符串。

pos:可选,表示搜索的起始位置。

返回值类型:BIGINT

示例:

m_db=# SELECT LOCATE('bar', 'foobarbar');
 locate 
--------
      4
(1 row)

m_db=# SELECT LOCATE('bar', 'foobarbar',5);
 locate 
--------
      7
(1 row)

LOWER

LOWER(str)

描述:将字符串中的大写字母转换为小写字母。LOWER的功能、用法和LCASE一致。

返回值类型:TEXT/BLOB

示例:

m_db=# SELECT LOWER('Hello,world!');
    lower     
--------------
 hello,world!
(1 row)

LPAD

LPAD(str, len, padstr)

描述:使用字符串padstr从左侧填充字符串str,直到长度为len。返回值的长度受GUC参数max_allowed_packet的影响,最大取值为Min(max_allowed_packet/函数返回值字符集单字符最大长度, 1073741819)。

参数:参数具体说明见下表。

参数

类型

描述

str

TEXT

待被填充的字符串

len

INT

填充后字符串的长度

padstr

TEXT

用于填充的字符串

返回值类型:TEXT/BLOB

  • 如果str长度大于len,则返回str左侧的len个字符。
  • 如果str、len、padstr中有一个为NULL,则返回NULL。
  • 如果len为负数,则返回NULL。

示例:

m_db=# SELECT LPAD('hello', 10, 'abc');
    lpad    
------------
 abcabhello
(1 row)

m_db=# SELECT LPAD('hello', 3, 'abc');
 lpad 
------
 hel
(1 row)

m_db=# SELECT LPAD('hello', 10, NULL);
 lpad 
------

(1 row)

m_db=# SELECT LPAD('hello', -10, 'abc');
 lpad 
------

(1 row)

LTRIM

LTRIM(str)

描述:删除字符串str左侧的空格。

返回值类型:TEXT/BLOB

示例:

m_db=# SELECT LTRIM('  hello   ');
  ltrim   
----------
 hello   
(1 row)

MAKE_SET

MAKE_SET(INT bits, TEXT str1, TEXT str2,...)

描述:返回一个分隔子字符串的字符串,字符串由参数集合中相应位置的字符串组成,str1对应bit0,str2对应bit1。函数最多能处理64项str入参,当超过64项时只截取前64项。bits获取最右侧N位bit值。

返回值类型:TEXT

示例:

m_db=# SELECT MAKE_SET(5,'hello','nice','world');
  make_set   
-------------
 hello,world
(1 row)

MD5

MD5(TEXT str)

描述:用于计算一个给定字符串的MD5摘要,并将结果作为一个32位的(由十六进制字符组成的)字符串返回。如果参数为NULL,则返回NULL。

返回值类型:TEXT

示例:

m_db=# SELECT MD5('Gauss');
               md5                
----------------------------------
 edc41fb7bf8bdac012523d1bcd949a4f
(1 row)
  • MD5加密算法安全性低,存在安全风险,不建议使用。
  • MD5函数会在日志中记录哈希的明文,因此不建议用户用该函数加密密钥等敏感信息。

MID

MID(TEXT str, INT pos)

描述:输出str从pos位置开始到str结尾的字符串,MID函数与SUBSTR函数完全一致,内部沿用SUBSTR函数。在升级观察期期间,调用MID函数创建视图,回滚之后由于SUBSTR函数没有被删除,导致该视图不会被删除。

返回值类型:TEXT/BLOB

示例:

m_db=# SELECT MID('foobarbarfoobar', 4);
     mid      
--------------
 barbarfoobar
(1 row)

MID(str FROM pos)

描述:输出str从pos位置开始到结尾的字符串。

返回值类型:TEXT/BLOB

示例:

m_db=# SELECT MID('foobarbarfoobar' FROM 4);
     mid      
--------------
 barbarfoobar
(1 row)

MID(TEXT str, INT pos, INT len)

描述:输出str从pos位置开始之后len个字符长度所组成的字符串。

返回值类型:TEXT/BLOB

示例:

m_db=# SELECT MID('foobarbarfoobar', 4, 9);
    mid    
-----------
 barbarfoo
(1 row)

MID(str FROM pos FOR len)

描述:输出str从pos位置开始之后len个字符长度所组成的字符串。

返回值类型:TEXT/BLOB

示例:

m_db=# SELECT MID('foobarbarfoobar' FROM 4 FOR 9);
    mid    
-----------
 barbarfoo
(1 row)

ORD

ORD(TEXT str)

描述:返回字符串参数中的第一个字符的字符代码。

  • 如果第一个字符为单字节字符,函数返回字符的ASCII值。
  • 如果第一个字符是多字节字符,返回逻辑为:第一个字节代码 + 第二个字节的代码 * 256 + 第三个字节的代码 * 256 * 256,即result += char[n] << (8*n),其中n为字节下标。

返回值类型:BIGINT

示例:

m_db=# SELECT ORD('gauss');
 ord 
-----
 103
(1 row)

OCTET_LENGTH

OCTET_LENGTH(str)

描述:以字节为单位返回字符串str的长度,即字节的数量。如果str不是字符串类型,以其标准输出格式的字符串的长度为准。

返回值类型:BIGINT

示例:

m_db=# SELECT OCTET_LENGTH('text');
 octet_length 
--------------
            4
(1 row)

POSITION

POSITION(substr in str)

描述:返回字符串substr在字符串str中第一次出现的位置,与LOCATE(substr,str)功能相同。

返回值类型:BIGINT

  • 此函数在参数m_format_dev_version值为's2'或以上版本且参数m_format_behavior_compat_options值包含'enable_conflict_funcs'的情况下为M-Compatibility兼容模式数据库实现行为,即本章节描述的行为;其他行为和《开发指南》中的“SQL参考 > 函数和操作符 > 数字操作函数和操作符”章节中的ceil函数保持一致。
  • 在非M-Compatibility兼容模式数据库实现行为下,入参类型为M-Compatibility兼容模式所独有的数据类型时(例如BIGINT UNSIGNED),使用该函数结果可能存在异常。

示例:

m_db=# SELECT POSITION('bs' in 'absbbsod');
 position 
----------
        2
(1 row)

QUOTE

QUOTE(TEXT str)

描述:在字符串str两端分别添加单引号后进行输出。同时可以将str中的特殊字符进行转义,包括\\、\'或Control+Z(\Z)。如果参数为NULL,则返回值为字符串“NULL”,而不括起单引号。

返回值类型:VARCHAR/LONGTEXT/VARBINARY/LONGBLOB

示例:

m_db=# SELECT QUOTE('Do not do that.');
       quote
-------------------
 'Do not do that.'
(1 row)
-- 字符串中含有也是字符\\、\'或Control+Z(\Z)。
m_db=# SELECT QUOTE('Don\\t do that.');
       quote
-------------------
 'Don\\t do that.'
(1 row)

m_db=# select quote('Don\Zt do that.');
       quote
-------------------
 'Don\Zt do that.'
(1 row)

m_db=# select quote('Don\'t do that.');
       quote
-------------------
 'Don\'t do that.'
(1 row)

m_db=# SELECT QUOTE(null);
 quote 
-------
 NULL
(1 row)

RANDOM_BYTES

RANDOM_BYTES(INT len)

描述:返回指定长度len的随机字符串。如果入参为NULL,则返回NULL,如果入参值不在[1, 1024],则返回“ Length value is out of range ”的错误信息。

返回值类型:BLOB

示例:

m_db=# SELECT RANDOM_BYTES(1);
 random_bytes 
--------------
 q
(1 row)

REPEAT

REPEAT(str, count)

描述:返回字符串str重复count次组成的字符串。如果count小于等于0,返回NULL。如果str或者count为NULL,返回NULL。返回值的长度受GUC参数max_allowed_packet的影响,最大取值为Min(max_allowed_packet, 1073741819)。

返回值类型:TEXT/BLOB

示例:

m_db=# SELECT REPEAT('abc', 3);
  repeat   
-----------
 abcabcabc
(1 row)

m_db=# SELECT REPEAT('abc', NULL);
 repeat 
--------

(1 row)

m_db=# SELECT REPEAT('abc', -1);
 repeat 
--------

(1 row)

REPLACE

REPLACE(str, from_str, to_str)

描述:使用字符串to_str替换字符串str中的字符串from_str,替换时区分大小写。当有任意一个参数为NULL时,返回NULL。返回值的长度受GUC参数max_allowed_packet的影响,最大取值为Min(max_allowed_packet, 1073741819)。

参数:参数具体说明见下表。

参数

类型

描述

str

TEXT

待被替换的字符串

from_str

TEXT

查找目标

to_str

TEXT

替换成

返回值类型:TEXT/BLOB

示例:

m_db=# SELECT REPLACE('abc,efg,hijk,abcde,dabc,e', 'abc', 'xyz');
          replace          
---------------------------
 xyz,efg,hijk,xyzde,dxyz,e
(1 row)

m_db=# SELECT REPLACE('abc,efg,hijk,abcde,dabc,e', NULL, 'xyz');
 replace 
---------

(1 row)

REVERSE

REVERSE(str)

描述:返回字符串str的倒序排列。

返回值类型:TEXT/BLOB

示例:

m_db=# SELECT REVERSE('abcd');
 reverse 
---------
 dcba
(1 row)

RIGHT

RIGHT(str, len)

描述:返回字符串str最右边len个字符,如果str或len为NULL,则返回NULL。

返回值类型:TEXT/BLOB

示例:

m_db=# SELECT RIGHT('abcdef', 4);
 right 
-------
 cdef
(1 row)

m_db=# SELECT RIGHT('abcdef', NULL);
 right 
-------

(1 row)

RPAD

RPAD(str, len, padstr)

描述:使用字符串padstr从右侧填充字符串str,直到长度为len。返回值的长度受GUC参数max_allowed_packet的影响,最大取值为Min(max_allowed_packet/函数返回值字符集单字符最大长度, 1073741819)。

参数:参数具体说明见下表。

参数

类型

描述

str

TEXT

待被填充的字符串

len

INT

填充后字符串的长度

padstr

TEXT

用于填充的字符串

返回值类型:TEXT/BLOB

  • 如果str长度大于len,则返回str左侧的len个字符。
  • 如果str、len、padstr中有一个为NULL,则返回NULL。
  • 如果len为负数,则返回NULL。

示例:

m_db=#  SELECT RPAD('hello', 10, 'abc');
    rpad    
------------
 helloabcab
(1 row)

m_db=# SELECT RPAD('hello', 3, 'abc');
 rpad 
------
 hel
(1 row)

m_db=# SELECT RPAD('hello', 10, NULL);
 rpad 
------

(1 row)

m_db=# SELECT RPAD('hello', -10, 'abc');
 rpad 
------

(1 row)

RTRIM

RTRIM(str)

描述:删除字符串str右侧的空格。

返回值类型:TEXT/BLOB

示例:

m_db=# SELECT RTRIM('  hello   ');
  rtrim  
---------
   hello
(1 row)

SHA

SHA(str)

描述:计算字符串str的SHA-1 160位检验和。

参数:str,字符串或数字。

返回值:字符串类型。40个十六进制数字组成的字符串。

示例:

m_db=# SELECT SHA('abc');
                   sha                    
------------------------------------------
 a9993e364706816aba3e25717850c26c9cd0d89d
(1 row)
  • SHA1加密算法安全性低,存在安全风险,不建议使用。
  • SHA函数会在日志中记录哈希的明文,因此不建议用户用该函数加密密钥等敏感信息。

SHA1

SHA1(str)

描述:SHA1是SHA函数的别名,功能用法相同。

示例:

m_db=# SELECT SHA1('abc');
                   sha1                   
------------------------------------------
 a9993e364706816aba3e25717850c26c9cd0d89d
(1 row)
  • SHA1加密算法安全性低,存在安全风险,不建议使用。
  • SHA1函数会在日志中记录哈希的明文,因此不建议用户用该函数加密密钥等敏感信息。

SHA2

SHA2(str, hash_length)

描述:计算字符串str的SHA-2检验和。

参数:

str:字符串或数字。

hash_length:对应相应的SHA2算法,可选值为 0(SHA-256)、224(SHA-224)、256(SHA-256)、384(SHA-384)、512(SHA-512),其他值将返回NULL。

返回值:字符串类型。40个十六进制数字组成的字符串。

示例:

m_db=# SELECT SHA2('abc', 224);
                           sha2                           
----------------------------------------------------------
 23097d223405d8228642a477bda255b32aadbce4bda0b3f7e36c9da7
(1 row)
  • SHA224加密算法安全性低,存在安全风险,不建议使用。
  • SHA2函数会在日志中记录哈希的明文,因此不建议用户用该函数加密密钥等敏感信息。

SPACE

SPACE(N)

描述:返回由N个空格组成的字符串,如果N小于等于0,返回空字符串。返回值的长度受GUC参数max_allowed_packet的影响,最大取值为Min(max_allowed_packet, 1073741819)。

返回值类型:TEXT

示例:

m_db=# SELECT CONCAT('a', SPACE(6), 'b');
  concat  
----------
 a      b
(1 row)

m_db=# SELECT CONCAT('a', SPACE(-1), 'b');
 concat 
--------
 ab
(1 row)

STRCMP

STRCMP(str1, str2)

描述:比较str1与str2是否相同。

返回值类型:INT

  • 如果 str1 等于 str2, STRCMP函数将返回 0。
  • 如果 str1 小于 str2, STRCMP函数将返回 -1。
  • 如果 str1 大于 str2, STRCMP函数将返回 1。
  • 当任意个参数为 NULL 时, STRCMP函数将返回 NULL。

示例:

m_db=# SELECT STRCMP('abc', 'abc');
 strcmp 
--------
      0
(1 row)

m_db=# SELECT STRCMP('abc1', 'abc');
 strcmp 
--------
      1
(1 row)

m_db=# SELECT STRCMP('abc', 'abc1');
 strcmp 
--------
     -1
(1 row)

m_db=# SELECT STRCMP('abc1', 'abc2');
 strcmp 
--------
     -1
(1 row)

m_db=# SELECT STRCMP('abc1', NULL);
 strcmp 
--------

(1 row)

SUBSTR

SUBSTR函数有以下四种原型,各原型中str、pos以及len的含义一致。

  • SUBSTR(str, pos)
  • SUBSTR(str FROM pos)
  • SUBSTR(str, pos, len)
  • SUBSTR(str FROM pos FOR len)
  • SUBSTR(str FOR len FROM pos)
  • SUBSTR(str FOR len)

描述:返回str的子字符串,起始位置为pos,长度为len。不指定len时,返回的子字符串从pos位置开始,一直到str字符串的结尾。

  • pos的位置从1开始计数。
  • 参数中包含NULL时,返回NULL。
  • pos为负数时,从str尾部向头部倒序确定起始位置。
  • len小于等于0、pos的位置为0、pos的位置越界时,返回空字符串。

参数:参数具体说明见下表。

参数

类型

描述

str

TEXT

待被截取的字符串

pos

INT

起始位置

len

INT

子字符串的长度

返回值类型:TEXT/BLOB

示例:

m_db=# SELECT SUBSTR('abcdefg', 2, 3);
 substr 
--------
 bcd
(1 row)

m_db=# SELECT SUBSTR('abcdefg', NULL);
 substr 
--------

(1 row)

m_db=# SELECT SUBSTR('abcdefg', 2);
 substr 
--------
 bcdefg
(1 row)

m_db=# SELECT SUBSTR('abcdefg', -2, 3);
 substr 
--------
 fg
(1 row)

m_db=# SELECT SUBSTR('abcdefg', -2);
 substr 
--------
 fg
(1 row)

m_db=# SELECT SUBSTR('abcdefg', 0, 3);
 substr 
--------

(1 row)

SUBSTRING

SUBSTRING函数有以下四种原型,各原型中str、pos以及len的含义一致。

  • SUBSTRING(str, pos)
  • SUBSTRING(str FROM pos)
  • SUBSTRING(str, pos, len)
  • SUBSTRING(str FROM pos FOR len)
  • SUBSTRING(str FOR len FROM pos)
  • SUBSTRING(str FOR len)

描述:SUBSTRING与SUBSTR功能、用法一致。

参数:参数具体说明见下表。

参数

类型

描述

str

TEXT

待被截取的字符串

pos

INT

起始位置

len

INT

子字符串的长度

返回值类型:TEXT/BLOB

示例:

m_db=# SELECT SUBSTRING('abcdefg', 2, 3);
 substring 
-----------
 bcd
(1 row)

m_db=# SELECT SUBSTRING('abcdefg', NULL);
 substring 
-----------

(1 row)

m_db=# SELECT SUBSTRING('abcdefg', 2);
 substring 
-----------
 bcdefg
(1 row)

m_db=# SELECT SUBSTRING('abcdefg', -2, 3);
 substring 
-----------
 fg
(1 row)

m_db=# SELECT SUBSTRING('abcdefg', -2);
 substring 
-----------
 fg
(1 row)

m_db=# SELECT SUBSTRING('abcdefg', 0, 3);
 substring 
-----------

(1 row)

SUBSTRING_INDEX

SUBSTRING_INDEX(str, delim, count)

描述:使用分隔符delim和次数count确定字符串str中最终分隔符的位置,返回分最终隔符左侧(或右侧)的全部字符。匹配分隔符delim时区分大小写。

  • 如果count为正数,从字符串的左侧开始计数,直到delim出现了count次,返回最终分隔符左侧的全部字符。
  • 如果count为负数,从字符串的右侧开始计数,直到delim出现了|count|次,返回最终分隔符右侧的全部字符。
  • 如果任意一个参数为NULL,返回NULL。
  • 如果str或delim为空字符串,返回空字符串
  • 如果count等于0,返回空字符串。

参数:参数具体说明见下表。

参数

类型

描述

str

TEXT

待被截取的字符串

delim

TEXT

分隔符

count

INT

分隔符出现的次数

返回值类型:TEXT/BLOB

示例:

m_db=# SELECT SUBSTRING_INDEX('abc..def..ghi..jkl....', '..', 3);
 substring_index 
-----------------
 abc..def..ghi
(1 row)

m_db=# SELECT SUBSTRING_INDEX('abc..def..ghi..jkl....', '..', -3);
 substring_index 
-----------------
 jkl....
(1 row)

m_db=# SELECT SUBSTRING_INDEX('abc..def..ghi..jkl....', '..', NULL);
 substring_index 
-----------------

(1 row)

m_db=# SELECT SUBSTRING_INDEX('abc..def..ghi..jkl....', '..' ,0);
 substring_index 
-----------------

(1 row)

TO_BASE64

TO_BASE64(TEXT str)

描述:将字符串转换为base-64编码形式,并将结果作为字符串返回。如果参数不为字符串,则在转换前,将其转换为字符串。返回值的长度受GUC参数max_allowed_packet的影响,最大取值为Min(max_allowed_packet, 1073741819)。

返回值类型:LONGTEXT

示例:

m_db=# SELECT TO_BASE64('Gauss');
 to_base64 
-----------
 R2F1c3M=
(1 row)

TRIM

TRIM([[BOTH | LEADING | TRAILING] [remstr] FROM] str)

描述:删除字符串str中的所有前缀/后缀子字符串remstr,当任意一个参数为NULL时,返回NULL。匹配remstr时区分大小写。

  • remstr:默认为空格。
  • [BOTH | LEADING | TRAILING]:
    • BOTH:删除前缀和后缀;
    • LEADING:删除前缀;
    • TRAILING:删除后缀;
    • 默认为BOTH。

返回值类型:TEXT/BLOB

示例:

m_db=# SELECT TRIM('   abc   ');
 trim 
------
 abc
(1 row)

m_db=# SELECT TRIM(TRAILING FROM '   abc   ');
  trim  
--------
    abc
(1 row)

m_db=# SELECT TRIM(BOTH 'xyz' FROM 'xyzxyabcxyzxy');
    trim    
------------
 xyabcxyzxy
(1 row)

UCASE

UCASE(str)

描述:将字符串中的小写字母转换为大写字母。UCASE的功能、用法和UPPER一致。

返回值类型:TEXT/BLOB

示例:

m_db=# SELECT UCASE('Hello,world!');
    ucase     
--------------
 HELLO,WORLD!
(1 row)

UNCOMPRESS

UNCOMPRESS (LONGBLOB string_to_uncompress)

描述:对COMPRESS函数压缩的字符串进行解压。如果函数入参不是压缩值,结果返回NULL。

返回值类型:LONGBLOB

示例:

m_db=# SELECT UNCOMPRESS(COMPRESS('abcde'));
 UNCOMPRESS(COMPRESS('abcde')) 
-------------------------------
 abcde
(1 row)

UNCOMPRESSED_LENGTH

UNCOMPRESSED_LENGTH(LONGBLOB compressed_string)

描述:返回压缩字符串在压缩之前的长度。

返回值类型:INT

示例:

m_db=# SELECT UNCOMPRESSED_LENGTH(COMPRESS('abcde'));
 UNCOMPRESSED_LENGTH(COMPRESS('abcde')) 
----------------------------------------
                                      5
(1 row)

UNHEX

UNHEX(str)

描述:将字符串str中的每个字符解释为十六进制数字,将其转换为该数字表示的字节,返回二进制字符串,其逆运算为HEX(str)。str中的字符必须是合法的十六进制数字,如果参数包含任何非法的数字,则返回NULL。

返回值类型:LONGBLOB

示例:

m_db=# SELECT UNHEX(616263), HEX(UNHEX('616263'));
 unhex |  hex   
-------+--------
 abc   | 616263
(1 row)

UPPER

UPPER(str)

描述:将字符串中的小写字母转换为大写字母。UPPER的功能、用法和UCASE一致。

返回值类型:TEXT/BLOB

示例:

m_db=# SELECT UPPER('Hello,world!');
    upper     
--------------
 HELLO,WORLD!
(1 row)

相关文档