字符串函数用于字符串处理,例如转换大小写、去除空格、提取子串等。本文介绍云原生数据仓库 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:通过
entryDelimiter
和keyValueDelimiter
拆分字符串,并返回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
的二进制字符串。如果
N
为null
,则返回结果为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, ...)
命令说明: 返回
N1
、N2
等整数对应的十进制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。
输入值类型:
bits
和number_of_bits
均为BIGINT类型,onstr
、offstr
和separator
均为VARCHAR类型。返回值类型:VARCHAR。
示例:
将5转换为二进制,从右至左取其前两位的值,其中1用
a
表示,0用b
表示,a
和b
之间用逗号(,)分隔,语句如下:SELECT export_set(5,'a','b',',',2);
返回结果如下:
+-----------------------------+ | export_set(5,'a','b',',',2) | +-----------------------------+ | a,b | +-----------------------------+
将6转换为二进制,从右至左取其前十位的值,其中1用
1
表示,0用0
表示,1
和0
之间用逗号(,)分隔,语句如下: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);
命令说明:返回
str
在str 1
、str 2
、str 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
。如果
str
、strlist
任一参数为null
,返回结果为null
。输入值类型:
str
和strlist
均为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
小数位,并将结果作为字符串返回。如果
D
为0
,则返回结果没有小数点或小数部分。输入值类型:
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。
示例:
输入的参数为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
首次出现的位置。输入值类型:
str
和substr
均为VARCHAR类型。返回值类型:BIGINT。
示例:
SELECT instr('foobarbar', 'bar');
返回结果如下:
+---------------------------+ | instr('foobarbar', 'bar') | +---------------------------+ | 4 | +---------------------------+
LEFT
LEFT(str, len)
命令说明:返回字符串
str
中最左边的len
个字符。如果
str
或者len
为null
,则返回结果为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
运算符用于将字符串expression
与pattern
进行匹配,匹配成功返回1
,匹配失败返回0
。 其中:pattern
为通配符模式,通配符包括:%
:匹配任意长度的字符串。_
:匹配单个字符。
escape_char
:对pattern
中的%
、_
进行转义,使得转义字符后面的%
、_
不作通配符使用。
输入值类型:
expression
、pattern
均为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
或者str
为null
,返回结果为null
。输入值类型:
str
和substr
均为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
个字符。输入值类型:
str
和padstr
均为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 1
,str 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功能相同,从字符串
str
的pos
开始返回len
长度的子字符串。输入值类型:
str
为VARCHAR类型,pos
和len
均为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
的八进制字符串表示形式。如果
N
为null
,返回结果为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
。输入值类型:
substr
和str
均为VARCHAR类型。返回值类型:BIGINT。
示例:
SELECT position('bar' in 'foobarbar');
返回结果如下:
+--------------------------------+ | position('bar' in 'foobarbar') | +--------------------------------+ | 4 | +--------------------------------+
REPEAT
repeat(str, count);
命令说明:返回由字符串
str
重复count
次数组成的字符串。如果
count<1
,则返回空字符串。如果
str
或count
为null
,则返回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
。输入值类型:
str
、from_str
和to_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
或者len
为null
,返回结果为null
。输入值类型:
str
为VARCHAR类型,len
为BIGINT类型。返回值类型:VARCHAR。
示例:
SELECT RIGHT('abc',3);
返回结果如下:
+----------------+ | RIGHT('abc',3) | +----------------+ | abc | +----------------+
RLIKE或REGEXP
expression RLIKE pattern;
expression REGEXP pattern;
命令说明:将字符串
expression
与pattern
进行正则匹配,匹配成功返回1
,否则返回0
。如果
expression
或者pattern
为null
,返回结果为null
。输入值类型:
expression
和pattern
均为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
个字符。输入值类型:
str
和padstr
均为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
进行分隔,并返回数组。输入值类型:
string
和delimiter
均为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。输入值类型:
string
和delimiter
均为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)
命令说明:通过
entryDelimiter
和keyValueDelimiter
拆分字符串并返回map
。entryDelimiter
将字符串分解为key-value
对,keyValueDelimiter
将每对key-value
分隔成key
和value
。输入值类型:
string
、entryDelimiter
和keyValueDelimiter
均为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 1
、str 2
相同,返回结果为0
。如果str 1
根据当前排序顺序小于str 2
,返回结果为-1
,否则返回结果为1
。输入值类型:
str 1
和str 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类型,pos
和len
均为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
函数区分大小写。输入值类型:
str
和delim
均为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。
示例:
输入的参数为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 | +--------------------------------------------------------------------------------+