字符串函数

字符串函数用于字符串处理,例如转换大小写、去除空格、提取子串等。本文介绍云原生数据仓库 AnalyticDB MySQL 版字符串函数的用法与示例。

  • ASCII:返回字符或者字符串最左边字符对应的ASCII值。

  • BIN:返回整数的二进制字符串。

  • BIT_LENGTH:以位为单位返回字符串的长度。

  • CHAR:返回整数对应的ASCII码组成的字符串。

  • CHAR_LENGTH或CHARACTER_LENGTH:以字符为单位返回字符串的长度。

  • CONCAT:连接字符串。

  • CONCAT_WS:连接字符串,字符串中间以分隔串间隔。

  • ELT:返回整数N指定的字符串。

  • ENCRYPT:对字符串进行加密。

  • EXPORT_SET:根据整数中的比特值,返回组合后的字符串。

  • FIELD:返回指定字符串在字符串列表中的索引位置。

  • FIND_IN_SET:返回字符或字符串在另一个字符串中的位置。

  • FORMAT:将数字N格式化,返回字符串。

  • FROM_BASE64:解码Base64编码的字符串并返回结果。

  • FROM_UTF8:解码UTF-8编码的字符串并返回结果。

  • HEX:将一个整数或字符串转换为其所对应的十六进制格式的字符串。

  • INSTR:返回字符串中子字符串首次出现的位置。

  • LEFT:从字符串最左边开始,返回N个字符。

  • LENGTH或OCTET_LENGTH:字符串长度。

  • LIKE:简单的模式匹配。

  • LOCATE:返回字符串首次出现在另一个字符串中的位置信息。

  • LOWER或LCASE:将字符串转换为小写。

  • LPAD:左拼接字符串。

  • LTRIM:删除字符串的前导空格。

  • MAKE_SET:返回一组以逗号分隔的字符串。

  • MID:从字符串的指定位置开始,返回指定长度的子字符串。作用同SUBSTR或SUBSTRING

  • OCT:返回指定整数的八进制字符串表示形式。

  • ORD:如果字符串最左边的字符是多字节字符,则返回该字符的代码。

  • POSITION:返回字符串中子字符串首次出现的位置。

  • REPEAT:返回字符串重复多次后的字符串。

  • REPLACE:用指定字符串替换另一个字符串中的部分字符。

  • REVERSE:将字符串逆序。

  • RIGHT:返回字符串最右边的指定数量的字符。

  • RLIKE或REGEXP:将字符串expression与pattern进行正则匹配,匹配成功返回1,否则返回0。

  • RPAD:右拼接字符串。

  • RTRIM:删除字符串的后置空格。

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

  • SPLIT:将字符串按分隔符进行分隔,并返回数组。

  • SPLIT_PART:将字符串按分隔符分隔,并返回分隔后指定数组下标的子串。

  • SPLIT_TO_MAP:通过entryDelimiterkeyValueDelimiter拆分字符串,并返回map

  • STRCMP:根据两个字符串的大小,返回0、1或者-1。

  • SUBSTR或SUBSTRING:返回从指定位置开始的指定长度的子字符串。

  • SUBSTRING_INDEX:返回字符串中最后一次分隔符出现之前的子字符串。

  • TO_BASE64:返回字符串的Base64编码形式。

  • TO_UTF8:返回字符串的UTF-8编码形式。

  • TRIM:删除字符串前后所有的空格。

  • UPPER或UCASE:将字符串转换为大写。

  • UNHEX:将十六进制数字转换为字符。

ASCII

ascii(str)
  • 命令说明:返回字符str或者字符串str最左边字符对应的十进制ASCII值。

  • 输入值类型:VARCHAR。

  • 返回值类型:BIGINT。

  • 示例:

    • 语句如下:

      SELECT ascii('2');

      返回结果如下:

      +------------+
      | ascii('2') |
      +------------+
      |         50 |
      +------------+              
    • 语句如下:

      SELECT ascii('dx');           

      返回结果如下:

      +-------------+
      | ascii('dx') |
      +-------------+
      |         100 |
      +-------------+      

BIN

bin(N)
  • 命令说明:返回N的二进制字符串。

    如果Nnull,则返回结果为NULL

  • 输入值类型:BIGINT。

  • 返回值类型:VARCHAR。

  • 示例:

    SELECT bin(12);

    返回结果如下:

    +---------+
    | bin(12) |
    +---------+
    | 1100    |
    +---------+

BIT_LENGTH

bit_length(str)
  • 命令说明:以位为单位返回字符串str的长度。

  • 输入值类型:VARCHAR。

  • 返回值类型:BIGINT。

  • 示例:

    • 语句如下:

      SELECT bit_length('text');

      返回结果如下:

      +--------------------+
      | bit_length('text') |
      +--------------------+
      |                 32 |
      +--------------------+              
    • 语句如下:

      SELECT bit_length('China');

      返回结果如下:

      +---------------------+
      | bit_length('China') |
      +---------------------+
      |                  40 |
      +---------------------+

CHAR

char(N1, N2, ...)
  • 命令说明: 返回N1N2等整数对应的十进制ASCII码组成的字符串。

  • 输入值类型:BIGINT。

  • 返回值类型:VARBINARY。

  • 示例:

    SELECT char(97,110,97,108,121,116,105,99,100,98);                   

    返回结果如下:

    +-------------------------------------------+
    | char(97,110,97,108,121,116,105,99,100,98) |
    +-------------------------------------------+
    | analyticdb                                |
    +-------------------------------------------+

CHAR_LENGTH或CHARACTER_LENGTH

char_length(str)
character_length(str)
  • 命令说明: 以字符为单位返回字符串str的长度。

    一个汉字所对应的字符长度是1

  • 输入值类型:VARCHAR。

  • 返回值类型:BIGINT。

  • 示例:

    • 语句如下:

      SELECT char_length('China');

      返回结果如下:

      +----------------------+
      | char_length('China') |
      +----------------------+
      |                    5 |
      +----------------------+
    • 语句如下:

      SELECT char_length('abc');

      返回结果如下:

      +--------------------+
      | char_length('abc') |
      +--------------------+
      |                  3 |
      +--------------------+                  

CONCAT

concat(str 1, …, str n)
  • 命令说明:字符串连接操作,其中任何一个参数为null,则返回值为null

  • 输入值类型:VARCHAR。

  • 返回值类型:VARCHAR。

  • 示例:

    • 语句如下:

      SELECT concat('aliyun', ', ', 'analyticdb');  

      返回结果如下:

      +--------------------------------------+
      | concat('aliyun', ', ', 'analyticdb') |
      +--------------------------------------+
      | aliyun, analyticdb                   |
      +--------------------------------------+                
    • 语句如下:

      SELECT concat('abc',null,'def');

      返回结果如下:

      +--------------------------+
      | concat('abc',null,'def') |
      +--------------------------+
      | NULL                     |
      +--------------------------+       

CONCAT_WS

concat_ws(separator, str 1, …, str n)
  • 命令说明:字符串连接操作,第一个参数separator是其余参数的分隔符,连接时会跳过任何为null值的字符串。

  • 输入值类型:VARCHAR。

  • 返回值类型:VARCHAR。

  • 示例:

    • 语句如下:

      SELECT concat_ws(',', 'First name', 'Second name', 'Last Name')AS result;                   

      返回结果如下:

      +----------------------------------+
      | result                           |
      +----------------------------------+
      | First name,Second name,Last Name |
      +----------------------------------+                   
    • 语句如下:

      SELECT concat_ws(',','First name',NULL,'Last Name')AS result;                 

      返回结果如下:

      +----------------------+
      | result               |
      +----------------------+
      | First name,Last Name |
      +----------------------+                  

ELT

elt(N, str 1, ...,str n);
  • 命令说明:返回第N个字符串。

    N<1或大于后面字符串参数的数量,则返回结果为null

  • 输入值类型:N为BIGINT类型,str为VARCHAR类型。

  • 返回值类型:VARCHAR。

  • 示例:

    SELECT elt(4, 'Aa', 'Bb', 'Cc', 'Dd');               

    返回结果如下:

    +--------------------------------+
    | elt(4, 'Aa', 'Bb', 'Cc', 'Dd') |
    +--------------------------------+
    | Dd                             |
    +--------------------------------+

ENCRYPT

encrypt(x, y);
  • 命令说明:对参数x进行加密,y为Salt值。

  • 输入值类型:x为VARBINARY类型,y为VARCHAR类型。

  • 返回值类型:VARBINARY

  • 示例:

    SELECT encrypt('abdABC123','key');              

    返回结果如下:

    +--------------------------------------------------------+
    | encrypt('abdABC123','key')                             |
    +--------------------------------------------------------+
    | 0x6B657A617A6D63496F2E614377                           |
    +--------------------------------------------------------+

EXPORT_SET

export_set(bits, onstr, offstr [, separator[,number_of_bits]]);
  • 命令说明:将bits转换为二进制值。其中:

    • 系统会从右到左检查二进制值,如果二进制值为1,则会被替换为onstr值;如果二进制值为0,则会被替换为offstr值。

    • 返回值之间由separator分隔。

    • number_of_bits指定了检查位数,默认值为64。如果指定number_of_bits大于64,则会被裁剪到64位;如果指定number_of_bits为-1,则检查位数仍默认为64。

  • 输入值类型:bitsnumber_of_bits均为BIGINT类型,onstroffstrseparator均为VARCHAR类型。

  • 返回值类型:VARCHAR。

  • 示例:

    • 将5转换为二进制,从右至左取其前两位的值,其中1用a表示,0用b表示,ab之间用逗号(,)分隔,语句如下:

      SELECT export_set(5,'a','b',',',2);

      返回结果如下:

      +-----------------------------+
      | export_set(5,'a','b',',',2) |
      +-----------------------------+
      | a,b                         |
      +-----------------------------+             
    • 将6转换为二进制,从右至左取其前十位的值,其中1用1表示,0用0表示,10之间用逗号(,)分隔,语句如下:

      SELECT export_set(6,'1','0',',',10);             

      返回结果如下:

      +------------------------------+
      | export_set(6,'1','0',',',10) |
      +------------------------------+
      | 0,1,1,0,0,0,0,0,0,0          |
      +------------------------------+

FIELD

FIELD(str, str 1, str 2,..., str n);
  • 命令说明:返回strstr 1str 2str n列表中的索引位置。 如果未找到str,则返回0

  • 输入值类型:VARCHAR。

  • 返回值类型:BIGINT。

  • 示例:

    SELECT FIELD('Bb', 'Aa', 'Bb', 'Cc', 'Dd', 'Ff');             

    返回结果如下:

    sq+-------------------------------------------+
    | FIELD('Bb', 'Aa', 'Bb', 'Cc', 'Dd', 'Ff') |
    +-------------------------------------------+
    |                                         2 |
    +-------------------------------------------+

FIND_IN_SET

find_in_set(str, strlist)            
  • 命令说明:返回str在列表strlist中的位置。

    如果str不在strlist中或者strlist是空字符串,返回结果为0

    如果strstrlist任一参数为null,返回结果为null

  • 输入值类型:strstrlist均为VARCHAR类型。

  • 返回值类型:BIGINT。

  • 示例:

    SELECT find_in_set('b','a,b,c,d');        

    返回结果如下:

    +----------------------------+
    | find_in_set('b','a,b,c,d') |
    +----------------------------+
    |                          2 |
    +----------------------------+

FORMAT

format(X, D)
  • 命令说明:将数字X格式化为#,###,###.##样式,舍入到D小数位,并将结果作为字符串返回。

    如果D0,则返回结果没有小数点或小数部分。

  • 输入值类型:X为DOUBLE类型,D为BIGINT类型。

  • 返回值类型:VARCHAR。

  • 示例:

    SELECT format(12332.123456, 4)AS result1, format(12332.1,4)AS result2, format(12332.2,0)AS result3;

    返回结果如下:

    +-------------+-------------+---------+
    | result1     | result2     | result3 |
    +-------------+-------------+---------+
    | 12,332.1235 | 12,332.1000 | 12,332  |
    +-------------+-------------+---------+

FROM_BASE64

from_base64(x)
  • 命令说明:解码Base64编码的参数x并返回结果。

  • 输入值类型:VARBINARY或VARCHAR。

  • 返回值类型:VARBINARY。

    说明

    解码后的返回值为VARBINARY类型,您可以通过如下方式将返回结果转换为VARCHAR类型:

    • AnalyticDB for MySQL集群版本大于或等于3.1.4,您可以使用CAST AS VARCHAR函数来转换数据类型。更多信息,请参见CAST函数

    • AnalyticDB for MySQL集群版本小于3.1.4,您可以使用FROM_UTF8函数来转换数据类型。更多信息,请参见FROM_UTF8

  • 示例:

    • 输入的参数为VARCHAR类型,语句如下:

      SELECT from_base64('Q2hpbmE=');         

      返回结果如下:

      +--------------------------------------------------+
      | from_base64('Q2hpbmE=')                          |
      +--------------------------------------------------+
      | 0x4368696E61                                     |
      +--------------------------------------------------+
      说明

      上述语句的返回值为VARBINARY类型,如需解析为原VARCHAR类型,您可以使用如下语句:

      SELECT cast(from_base64('Q2hpbmE=') AS varchar);

      返回结果如下:

      +------------------------------------------+
      | cast(from_base64('Q2hpbmE=') AS varchar) |
      +------------------------------------------+
      | China                                    |
      +------------------------------------------+
    • 输入的参数为VARBINARY类型,语句如下

      SELECT from_base64(cast(to_base64('China') AS varbinary));

      返回结果如下:

      +--------------------------------------------------------------------------------------------------------+
      | from_base64(cast(to_base64('China') AS varbinary))                                                     |
      +--------------------------------------------------------------------------------------------------------+
      | 0x4368696E61                                                                                           |
      +--------------------------------------------------------------------------------------------------------+

FROM_UTF8

from_utf8(x)
from_utf8(x, y)
  • 命令说明:

    • from_utf8(x):解码UTF-8编码的x并返回结果。

    • from_utf8(x, y):解码非UTF-8编码的参数x,并将其替换为指定的非法字符。

      说明
      • y可以不填。若不指定y则默认返回

      • y可以是非法字符本身(例如#),也可以是非法字符所对应的ASCII码(例如35)。

  • 输入值类型:x为VARBINARY类型,y为VARCHAR或BIGINT类型。

  • 返回值类型:VARCHAR。

  • 示例:

    • 解码UTF-8编码的参数并返回结果,语句如下:

      SELECT from_utf8(to_utf8('hello'));

      返回结果如下:

      +-----------------------------+
      | from_utf8(to_utf8('hello')) |
      +-----------------------------+
      | hello                       |
      +-----------------------------+
    • 解码非UTF-8编码的参数,语句如下:

      SELECT from_utf8(unhex('58BF'));

      返回结果如下:

      +--------------------------+
      | from_utf8(unhex('58BF')) |
      +--------------------------+
      | X�                       |
      +--------------------------+
    • 解码非UTF-8编码的参数,并将其替换为非法字符#,语句如下:

      SELECT from_utf8(unhex('58BF'), '#');

      返回结果如下:

      +-------------------------------+
      | from_utf8(unhex('58BF'), '#') |
      +-------------------------------+
      | X#                            |
      +-------------------------------+
    • 解码非UTF-8编码的参数,并将其替换为非法字符,其中非法字符的ASCII码为35,语句如下:

      SELECT from_utf8(unhex('58BF'), '35');

      返回结果如下:

      +-------------------------------+
      | from_utf8(unhex('58BF'), '35') |
      +-------------------------------+
      | X#                            |
      +-------------------------------+

HEX

hex(x)
  • 命令说明:将参数x转换为其所对应的十六进制格式的字符串。

  • 输入值类型:BIGINT或VARCHAR。

  • 返回值类型:VARCHAR。

  • 示例:

    • 输入值类型为BIGINT,语句如下:

      SELECT hex(16);

      返回结果如下:

      +---------+
      | hex(16) |
      +---------+
      | 10      |
      +---------+
    • 输入值类型为VARCHAR,语句如下:

      SELECT hex('16');

      返回结果如下:

      +-----------+
      | hex('16') |
      +-----------+
      | 3136      |
      +-----------+                  

INSTR

instr(str, substr)
  • 命令说明:返回字符串str中子字符串substr首次出现的位置。

  • 输入值类型:strsubstr均为VARCHAR类型。

  • 返回值类型:BIGINT。

  • 示例:

    SELECT instr('foobarbar', 'bar');

    返回结果如下:

    +---------------------------+
    | instr('foobarbar', 'bar') |
    +---------------------------+
    |                         4 |
    +---------------------------+

LEFT

LEFT(str, len)
  • 命令说明:返回字符串str中最左边的len个字符。

    如果str或者lennull,则返回结果为null

  • 输入值类型:str为VARCHAR类型,len为BIGINT类型。

  • 返回值类型:VARCHAR。

  • 示例:

    SELECT LEFT('foobarbar', 5);               

    返回结果如下:

    +----------------------+
    | LEFT('foobarbar', 5) |
    +----------------------+
    | fooba                |
    +----------------------+

LENGTH或OCTET_LENGTH

length(str)
octet_length(str)
  • 命令说明:返回字符串str的长度。

  • 输入值类型:VARCHAR。

  • 返回值类型:BIGINT。

  • 示例:

    SELECT length('aliyun');               

    返回结果如下:

    +------------------+
    | length('aliyun') |
    +------------------+
    |                6 |
    +------------------+

LIKE

expression [NOT] LIKE pattern [ESCAPE 'escape_char']
  • 命令说明:LIKE运算符用于将字符串expressionpattern进行匹配,匹配成功返回1,匹配失败返回0。 其中:

    • pattern为通配符模式,通配符包括:

      • %:匹配任意长度的字符串。

      • _:匹配单个字符。

    • escape_char:对pattern中的%_进行转义,使得转义字符后面的%_不作通配符使用。

  • 输入值类型:expressionpattern均为VARCHAR类型。

  • 返回值类型:BIGINT。

  • 示例:

    • 语句如下:

      SELECT 'David!' LIKE 'David_' AS result1, 'David!' NOT LIKE 'David_' AS result2,  'David!' LIKE '%D%v%' AS result3;

      返回结果如下:

      +---------+---------+---------+
      | result1 | result2 | result3 |
      +---------+---------+---------+
      |       1 |       0 |       1 |
      +---------+---------+---------+            
    • 语句如下:

      SELECT 'David_' LIKE 'David|_' ESCAPE '|';

      返回结果如下:

      +----------------------------------+
      | David_' LIKE 'David|_' ESCAPE '| |
      +----------------------------------+
      |                                1 |
      +----------------------------------+

LOCATE

locate(substr, str)
locate(substr, str, pos)
  • 命令说明:返回字符串str中首次出现substr的位置信息,或者返回字符串str中从指定位置pos开始首次出现substr的位置信息。

    如果substr不在str中,返回结果为0

    如果substr或者strnull,返回结果为null

  • 输入值类型:strsubstr均为VARCHAR类型,pos为BIGINT类型。

  • 返回值类型:BIGINT。

  • 示例:

    • 语句如下:

      SELECT locate('bar', 'foobarbar');                

      返回结果如下:

      +----------------------------+
      | locate('bar', 'foobarbar') |
      +----------------------------+
      |                          4 |
      +----------------------------+                
    • 语句如下:

      SELECT locate('bar', 'foobarbar', 7);              

      返回结果如下:

      +-------------------------------+
      | locate('bar', 'foobarbar', 7) |
      +-------------------------------+
      |                             7 |
      +-------------------------------+                   

LOWER或LCASE

lower(str)
lcase(str)
  • 命令说明:将字符串str中的字母转换为小写。

  • 返回值类型:VARCHAR。

  • 返回值类型:VARCHAR。

  • 示例:

    SELECT lower('Aliyun');

    返回结果如下:

    +-----------------+
    | lower('Aliyun') |
    +-----------------+
    | aliyun          |
    +-----------------+

LPAD

lpad(str, len, padstr)
  • 命令说明:将字符串str左边拼接padstr直到长度达到len,并返回拼接后的字符串。

    如果str长于len,则返回值将缩短为len个字符。

  • 输入值类型:strpadstr均为VARCHAR类型,len为BIGINT类型。

  • 返回值类型:VARCHAR。

  • 示例:

    SELECT lpad('Aliyun',9,'#');              

    返回结果如下:

    +----------------------+
    | lpad('Aliyun',9,'#') |
    +----------------------+
    | ###Aliyun            |
    +----------------------+

LTRIM

ltrim(str)
  • 命令说明:删除字符串str所有前导空格。

  • 输入值类型:VARCHAR。

  • 返回值类型:VARCHAR。

  • 示例:

    SELECT ltrim('  abc');                  

    返回结果如下:

    +----------------+
    | ltrim('  abc') |
    +----------------+
    | abc            |
    +----------------+

MAKE_SET

make_set(bits, str 1, str 2,...);
  • 命令说明:返回一个设置值(包含由字符分隔的子字符串的字符串),其中包含具有相应位设置的字符串。

    str 1对应于0位,str 2对应于1位,依此类推。str 1str 2,...中的null值不会附加到结果中。

  • 输入值类型:bits为BIGINT类型,str为VARCHAR类型。

  • 返回值类型:VARCHAR。

  • 示例:

    • 语句如下:

      SELECT make_set(5,'hello','nice','world');

      返回结果如下:

      +------------------------------------+
      | make_set(5,'hello','nice','world') |
      +------------------------------------+
      | hello,world                        |
      +------------------------------------+               
    • 语句如下:

      SELECT make_set(1 | 4,'hello','nice',NULL,'world')AS result;    

      返回结果如下:

      +--------+
      | result |
      +--------+
      | hello  |
      +--------+                

MID

mid(str, pos, len)
  • 命令说明:与SUBSTR或SUBSTRING功能相同,从字符串strpos开始返回len长度的子字符串。

  • 输入值类型:str为VARCHAR类型,poslen均为BIGINT类型。

  • 返回值类型:VARCHAR。

  • 示例:

    • 语句如下:

      SELECT mid('Quadratically',5,6);

      返回结果如下:

      +--------------------------+
      | mid('Quadratically',5,6) |
      +--------------------------+
      | ratica                   |
      +--------------------------+                
    • 语句如下:

      SELECT mid('Sakila', -5, 3);

      返回结果如下:

      +----------------------+
      | mid('Sakila', -5, 3) |
      +----------------------+
      | aki                  |
      +----------------------+

OCT

oct(N)
  • 命令说明:返回整数N的八进制字符串表示形式。

    如果Nnull,返回结果为null

  • 输入值类型:BIGINT。

  • 返回值类型:VARCHAR。

  • 示例:

    SELECT oct(12);

    返回结果如下:

    +---------+
    | oct(12) |
    +---------+
    | 14      |
    +---------+

ORD

ord(x)
  • 命令说明:如果字符串x最左边的字符是多字节字符,则返回该字符的代码。

  • 输入值类型:VARBINARY或VARCHAR。

  • 返回值类型:LONG。

  • 示例:

    • 输入的参数为VARCHAR类型,语句如下:

      SELECT ord('China');

      返回结果如下:

      +--------------+
      | ord('China') |
      +--------------+
      |           67 |
      +--------------+
    • 输入的参数为VARBINARY类型,语句如下

      SELECT ord(cast('China' AS varbinary));

      返回结果如下:

      +---------------------------------+
      | ord(cast('China' AS varbinary)) |
      +---------------------------------+
      |                              67 |
      +---------------------------------+

POSITION

position(substr IN str);
  • 命令说明: 返回字符串str中子字符串substr首次出现位置,位置从1开始,如果未找到则返回0

  • 输入值类型:substrstr均为VARCHAR类型。

  • 返回值类型:BIGINT。

  • 示例:

    SELECT position('bar' in 'foobarbar');                 

    返回结果如下:

    +--------------------------------+
    | position('bar' in 'foobarbar') |
    +--------------------------------+
    |                              4 |
    +--------------------------------+

REPEAT

repeat(str, count);
  • 命令说明:返回由字符串str重复count次数组成的字符串。

    如果count<1,则返回空字符串。

    如果strcountnull,则返回null

  • 输入值类型:str为VARCHAR类型,count为BIGINT类型。

  • 返回值类型:VARCHAR。

  • 示例:

    • 语句如下:

      SELECT repeat('a', 3);            

      返回结果如下:

      +----------------+
      | repeat('a', 3) |
      +----------------+
      | aaa            |
      +----------------+             
    • 语句如下:

      SELECT repeat('abc', null);

      返回结果如下:

      +---------------------+
      | repeat('abc', null) |
      +---------------------+
      | NULL                |
      +---------------------+                
    • 语句如下:

      SELECT repeat(null, 3);

      返回结果如下:

      +-----------------+
      | repeat(null, 3) |
      +-----------------+
      | NULL            |
      +-----------------+                 

REPLACE

replace(str, from_str, to_str);
  • 命令说明:将str中的from_str内容替换为to_str

  • 输入值类型:strfrom_strto_str均为VARCHAR类型。

  • 返回值类型:VARCHAR。

  • 示例:

    SELECT replace('WWW.aliyun.com', 'W', 'w');

    返回结果如下:

    +-------------------------------------+
    | replace('WWW.aliyun.com', 'W', 'w') |
    +-------------------------------------+
    | www.aliyun.com                      |
    +-------------------------------------+

REVERSE

reverse(str);
  • 命令说明:返回str逆序后的字符串。

  • 输入值类型:VARCHAR。

  • 返回值类型:VARCHAR。

  • 示例:

    SELECT reverse('123456');

    返回结果如下:

    +-------------------+
    | reverse('123456') |
    +-------------------+
    | 654321            |
    +-------------------+

RIGHT

RIGHT(str, len);
  • 命令说明:返回字符串str中最右边的len个字符。

    如果str或者lennull,返回结果为null

  • 输入值类型:str为VARCHAR类型,len为BIGINT类型。

  • 返回值类型:VARCHAR。

  • 示例:

    SELECT RIGHT('abc',3);             

    返回结果如下:

    +----------------+
    | RIGHT('abc',3) |
    +----------------+
    | abc            |
    +----------------+

RLIKE或REGEXP

expression RLIKE pattern;
expression REGEXP pattern;
  • 命令说明:将字符串expressionpattern进行正则匹配,匹配成功返回1,否则返回0

    如果expression或者patternnull,返回结果为null

  • 输入值类型:expressionpattern均为VARCHAR类型。

  • 返回值类型:BOOLEAN。

  • 示例:

    • 语句如下:

      SELECT 'Michael!' REGEXP '.*';

      返回结果如下:

      +----------------------+
      | Michael!' REGEXP '.* |
      +----------------------+
      |                    1 |
      +----------------------+            
    • 语句如下:

      SELECT 'new*\n*line' REGEXP 'new\\*.\\*line';

      返回结果如下:

      +-------------------------------------+
      | new*\n*line' REGEXP 'new\\*.\\*line |
      +-------------------------------------+
      |                                   0 |
      +-------------------------------------+                
    • 语句如下:

      SELECT 'c' REGEXP '^[a-d]';                 

      返回结果如下:

      +-------------------+
      | c' REGEXP '^[a-d] |
      +-------------------+
      |                 1 |
      +-------------------+                  

RPAD

rpad(str, len, padstr)
  • 命令说明:将字符串str右边拼接padstr直到长度达到len,并返回拼接后的字符串。

    如果str长于len,则返回值将缩短为len个字符。

  • 输入值类型:strpadstr均为VARCHAR类型,len为BIGINT类型。

  • 返回值类型:VARCHAR。

  • 示例:

    SELECT rpad('Aliyun',9,'#');                  

    返回结果如下:

    +----------------------+
    | rpad('Aliyun',9,'#') |
    +----------------------+
    | Aliyun###            |
    +----------------------+

RTRIM

rtrim(str)
  • 命令说明:删除字符串str所有后置空格。

  • 输入值类型:VARCHAR。

  • 返回值类型:VARCHAR。

  • 示例:

    SELECT rtrim('barbar   ');

    返回结果如下:

    +--------------------+
    | rtrim('barbar   ') |
    +--------------------+
    | barbar             |
    +--------------------+

SPACE

space(N);
  • 命令说明:返回由指定数量空格组成的字符串。

    说明

    您可以将该函数与contact()函数组合使用,方便展示返回结果。

  • 输入值类型:BIGINT。

  • 返回值类型:VARCHAR。

  • 示例:

    SELECT concat("#", space(6), "#");                 

    返回结果如下:

    +----------------------------+
    | concat("#", space(6), "#") |
    +----------------------------+
    | #      #                   |
    +----------------------------+

SPLIT

split(string, delimiter)
  • 命令说明:将字符串string按分隔符delimiter进行分隔,并返回数组。

  • 输入值类型:stringdelimiter均为VARCHAR类型。

  • 返回值类型:ARRAY<varchar>。

  • 示例:

    SELECT split('1#2#3', '#'), split('#1#2#3#', '#'),  split('123', '#');

    返回结果如下:

    +---------------------+-----------------------+-------------------+
    | split('1#2#3', '#') | split('#1#2#3#', '#') | split('123', '#') |
    +---------------------+-----------------------+-------------------+
    | ["1","2","3"]       | ["","1","2","3",""]   | ["123"]           |
    +---------------------+-----------------------+-------------------+

SPLIT_PART

split_part(string, delimiter, index)
  • 命令说明:将字符串string按分隔符delimiter分隔,并返回分隔后数组下标为index的子串。index以1开头,如果大于字段数则返回NULL。

  • 输入值类型:stringdelimiter均为VARCHAR类型,index为BIGINT类型。

  • 返回值类型:VARCHAR。

  • 示例:

    SELECT split_part('A#B#C', '#', 2), split_part('A#B#C', '#', 4);

    返回结果如下:

    +-----------------------------+-----------------------------+
    | split_part('A#B#C', '#', 2) | split_part('A#B#C', '#', 4) |
    +-----------------------------+-----------------------------+
    | B                           | NULL                        |
    +-----------------------------+-----------------------------+

SPLIT_TO_MAP

split_to_map(string, entryDelimiter, keyValueDelimiter)
  • 命令说明:通过entryDelimiterkeyValueDelimiter拆分字符串并返回mapentryDelimiter将字符串分解为key-value对,keyValueDelimiter将每对key-value分隔成keyvalue

  • 输入值类型:stringentryDelimiterkeyValueDelimiter均为VARCHAR类型。

  • 返回值类型:MAP<varchar, varchar>。

  • 示例:

    SELECT split_to_map('k1:v1,k2:v2', ',', ':'),split_to_map('', ',', ':');

    返回结果如下:

    +---------------------------------------+----------------------------+
    | split_to_map('k1:v1,k2:v2', ',', ':') | split_to_map('', ',', ':') |
    +---------------------------------------+----------------------------+
    | {"k1":"v1","k2":"v2"}                 | {}                         |
    +---------------------------------------+----------------------------+

STRCMP

strcmp(str 1, str 2);
  • 命令说明:如果字符串str 1str 2相同,返回结果为0。如果str 1根据当前排序顺序小于str 2,返回结果为-1,否则返回结果为1

  • 输入值类型:str 1str 2均为VARCHAR类型。

  • 返回值类型:BIGINT。

  • 示例:

    SELECT strcmp('text', 'text2');

    返回结果如下:

    +-------------------------+
    | strcmp('text', 'text2') |
    +-------------------------+
    |                      -1 |
    +-------------------------+

SUBSTR或SUBSTRING

substr(str, pos)
substr(str FROM pos)
substr(str, pos, len)
substr(str FROM pos FOR len)
substring(str, pos)
substring(str FROM pos)
substring(str, pos, len)
substring(str FROM pos FOR len)
  • 命令说明:

    • SUBSTRING(varchar str, bigint pos)SUBSTRING(varchar str FROM pos)返回从pos位置开始到字符串结束的子串。如果pos<0,则起始位置从字符串的末尾开始倒数。

    • SUBSTRING(varchar str, bigint pos, bigint len)SUBSTRING(varchar str FROM pos FOR len)返回从pos位置开始长度为len的子串。 如果pos<0,则起始位置从字符串的末尾开始倒数。

  • 输入值类型:str为VARCHAR类型,poslen均为BIGINT类型。

  • 返回值类型:VARCHAR。

  • 示例:

    • 语句如下:

      SELECT substr('helloworld', 6);

      返回结果如下:

      +-------------------------+
      | substr('helloworld', 6) |
      +-------------------------+
      | world                   |
      +-------------------------+
    • 语句如下:

      SELECT substr('helloworld' FROM 6);

      返回结果如下:

      +-----------------------------+
      | substr('helloworld' FROM 6) |
      +-----------------------------+
      | world                       |
      +-----------------------------+
    • 语句如下:

      SELECT substr('helloworld', 6, 3);

      返回结果如下:

      +----------------------------+
      | substr('helloworld', 6, 3) |
      +----------------------------+
      | wor                        |
      +----------------------------+
    • 语句如下:

      SELECT substr('helloworld' from 6 for 3);

      返回结果如下:

      +-----------------------------------+
      | substr('helloworld' FROM 6 FOR 3) |
      +-----------------------------------+
      | wor                               |
      +-----------------------------------+

SUBSTRING_INDEX

substring_index(str, delim, count)
  • 命令说明:返回字符串str中最后一次分隔符delim出现之前的子字符串。

    如果count>0,返回最后一次delim左侧的所有内容,即从左侧开始计算。

    如果count<0,返回最后一次delim右侧的所有内容,即从右侧开始计算。

    搜索delim时,SUBSTRING_INDEX函数区分大小写。

  • 输入值类型:strdelim均为VARCHAR类型,count为BIGINT类型。

  • 返回值类型:VARCHAR。

  • 示例:

    SELECT substring_index('www.aliyun.com', '.', 2);                 

    返回结果如下:

    +-------------------------------------------+
    | substring_index('www.aliyun.com', '.', 2) |
    +-------------------------------------------+
    | www.aliyun                                |
    +-------------------------------------------+

TO_BASE64

to_base64(x)
  • 命令说明:返回参数x的Base64编码形式。

  • 输入值类型:VARBINARY或VARCHAR。

  • 返回值类型:VARCHAR。

  • 示例:

    • 输入的参数为VARCHAR类型,语句如下:

      SELECT to_base64('China');

      返回结果如下:

      +--------------------+
      | to_base64('China') |
      +--------------------+
      | Q2hpbmE=           |
      +--------------------+
    • 输入的参数为VARBINARY类型,语句如下

      SELECT to_base64(cast('China' AS varbinary));

      返回结果如下:

      +---------------------------------------+
      | to_base64(cast('China' AS varbinary)) |
      +---------------------------------------+
      | Q2hpbmE=                              |
      +---------------------------------------+

TO_UTF8

to_utf8(x)
  • 命令说明:返回参数x的UTF-8编码形式。

  • 输入值类型:VARCHAR。

  • 返回值类型:VARCHAR。

  • 示例:

    SELECT to_utf8('China');

    返回结果如下:

    +------------------------------------+
    | to_utf8('China')                   |
    +------------------------------------+
    | 0x4368696E61                       |
    +------------------------------------+

TRIM

trim([remstr FROM] str)
trim([{BOTH | LEADING | TRAILING} [remstr] FROM] str)
  • 命令说明:通过删除前导空格和尾随空格或删除与可选的指定字符串remstr匹配的字符来剪裁字符串str

  • 输入值类型:VARCHAR。

  • 返回值类型:VARCHAR。

  • 示例:

    • 语句如下:

      SELECT trim('  bar   ');

      返回结果如下:

      +------------------+
      | trim('  bar   ') |
      +------------------+
      | bar              |
      +------------------+                 
    • 语句如下:

      SELECT trim(BOTH 'x' FROM 'xxxbarxxx');

      返回结果如下:

      +---------------------------------+
      | trim(BOTH 'x' FROM 'xxxbarxxx') |
      +---------------------------------+
      | bar                             |
      +---------------------------------+
    • 语句如下:

      SELECT trim(LEADING 'x' FROM 'xxxbarxxx');

      返回结果如下:

      +------------------------------------+
      | trim(LEADING 'x' FROM 'xxxbarxxx') |
      +------------------------------------+
      | barxxx                             |
      +------------------------------------+
    • 语句如下:

      SELECT trim(TRAILING 'x' from 'xxxbarxxx');

      返回结果如下:

      +-------------------------------------+
      | trim(TRAILING 'x' from 'xxxbarxxx') |
      +-------------------------------------+
      | xxxbar                              |
      +-------------------------------------+       

UPPER或UCASE

upper(str)
ucase(str)
  • 命令说明:将字符串str中的字母转换为大写。

  • 输入值类型:VARCHAR。

  • 返回值类型:VARCHAR。

  • 示例:

    SELECT upper('Aliyun');              

    返回结果如下:

    +-----------------+
    | upper('Aliyun') |
    +-----------------+
    | ALIYUN          |     

UNHEX

unhex(x);
  • 命令说明:将参数x中的每对十六进制数字解释为一个数字,并将其转换为该数字表示的字符。

  • 输入值类型:VARBINARY或VARCHAR。

  • 返回值类型:VARBINARY。

    说明
    • 解码后的返回值为VARBINARY类型,您可以通过如下方式将返回结果转换为VARCHAR类型:

      • AnalyticDB for MySQL集群版本大于或等于3.1.4,您可以使用CAST AS VARCHAR函数来转换数据类型。更多信息,请参见CAST函数

      • AnalyticDB for MySQL集群版本小于3.1.4,您可以使用FROM_UTF8函数来转换数据类型。更多信息,请参见FROM_UTF8

    • 如果UNHEX的输入值中包含任何非十六进制数字,则返回NULL。

  • 示例:

    • 输入的参数为VARCHAR类型,语句如下:

      SELECT unhex(hex('China'));

      返回结果如下:

      +------------------------------------------+
      | unhex(hex('China'))                      |
      +------------------------------------------+
      | 0x4368696E61                             |
      +------------------------------------------+
      说明

      上述语句的返回值为VARBINARY类型,如需解析为原VARCHAR类型,您可以使用如下语句:

      SELECT cast(unhex(hex('China')) AS varchar);

      返回结果如下:

      +--------------------------------------+
      | cast(unhex(hex('China')) AS varchar) |
      +--------------------------------------+
      | China                                |
      +--------------------------------------+
    • 输入的参数为VARBINARY类型,语句如下

      SELECT unhex(cast(hex('China') AS varbinary));

      返回结果如下:

      +--------------------------------------------------------------------------------+
      | unhex(cast(hex('China') AS varbinary))                                         |
      +--------------------------------------------------------------------------------+
      | 0x4368696E61                                                                   |
      +--------------------------------------------------------------------------------+